a =[{
"id":"1",
"Name":'BK',
"Age":'56'
},
{
"id":"1",
"Sex":'Male'
},
{
"id":"2",
"Name":"AK",
"Age":"32"
}]
我有一个字典列表,其中一个人信息在多个字典中拆分为上面的前 id 1 的信息包含在前 2 个字典中,我怎样才能得到下面的输出
{1: {'Name':'BK','Age':'56','Sex':'Male'}, 2: { 'Name': 'AK','Age':'32'}}
您可以使用一些内置函数。groupby 按 id 对字典进行分组,然后是一个 defaultdict 来收集结果。
from itertools import groupby
from collections import defaultdict
a =[{ "id":"1", "Name":'BK', "Age":'56' }, { "id":"1", "Sex":'Male' }, { "id":"2", "Name":"AK", "Age":"32" }]
results = defaultdict(dict)
key = lambda d: d['id']
for group_id, grouped in groupby(sorted(a, key=key), key=key):
for d in grouped:
d.pop('id')
results[group_id].update(**d)
这给了你:
>>> results
defaultdict(<type 'dict'>, {'1': {'Age': '56', 'Name': 'BK', 'Sex': 'Male'}, '2': {'Age': '32', 'Name': 'AK'}})
defaultdict 类型的行为与普通 dict 类似,不同之处在于当您引用未知值时,将返回默认值。这意味着随着字典a
的迭代,值(除了id
)会更新到现有字典或自动新创建的字典上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句