[英]Dict from list of dicts
我有一个字典列表。
dictList = [
{'name': 'some name'},
{'name': 'some other name'},
{'age': 'some age'},
{'last_name': 'some last name'}
]
在该字典列表中,每个字典都有一个键和该键的一个值,如上所示。
我需要创建一个包含所有dict中的键的dict,每个键的每个值都是一组带有dict列表中项目值的集合。 在示例中,将是这样的:
expected_dict = {
'name': ['some name', 'some other name'],
'age': ['some age'],
'last_name': ['some last name']
}
如何在Python中执行此操作?
collections.defaultdict
是一种方式:
from collections import defaultdict
d = defaultdict(list)
dictList = [
{'name': 'some name'},
{'name': 'some other name'},
{'age': 'some age'},
{'last_name': 'some last name'}
]
for i in dictList:
for k, v in i.items():
d[k].append(v)
# defaultdict(list,
# {'age': ['some age'],
# 'last_name': ['some last name'],
# 'name': ['some name', 'some other name']})
您可以使用内置的setdefault()
函数。
dictList = [
{'name': 'some name'},
{'name': 'some other name'},
{'age': 'some age'},
{'last_name': 'some last name'}
]
expected_dict = {}
for dictionary in dictList:
for key, val in dictionary.items():
expected_dict.setdefault(key, []).append(val)
print(expected_dict)
输出:
{
'name': ['some name', 'some other name'],
'age': ['some age'],
'last_name': ['some last name']
}
注意:使用collections.defaultdict
(如本答案所示)比使用dict.setdefault()
更简单,更快。
从文档中 :
collections.defaultdict
工作:
首次遇到每个键时,它尚未在映射中; 因此,将使用
default_factory
函数自动创建一个条目,该函数返回一个空列表。 然后,list.append()
操作list.append()
值附加到新列表。 当再次遇到键时,查找将正常进行(返回该键的列表),并且list.append()
操作将另一个值添加到列表中。 与使用dict.setdefault()
的等效技术相比,此技术更简单,更快。
bigD = {}
for element in dictList:
for key in element:
if key in bigD:
bigD[key].append(element[key])
else:
bigD[key] = element[key]
您可以使用itertools.groupby
:
import import itertools
dictList = [
{'name': 'some name'},
{'name': 'some other name'},
{'age': 'some age'},
{'last_name': 'some last name'}
]
new_list = {a:[c for [[_, c]] in b] for a, b in itertools.groupby(map(lambda x:x.items(), dictList), key=lambda x:x[0][0])}
输出:
{'age': ['some age'], 'last_name': ['some last name'], 'name': ['some name', 'some other name']}
很简单
dict = {}
list = [1,2,3]
dict['numbs'] = list
print(dict)
输出: {'numbs': [1, 2, 3]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.