我有一个dicts列表。
dictList = [
{'name': 'some name'},
{'name': 'some other name'},
{'age': 'some age'},
{'last_name': 'some last name'}
]
在该dicts列表中,每个dict都有一个键和一个键值,如上所示。
我需要创建一个包含所有dicts键的dict,每个键的每个值都是一个带有dicts列表中的项值的集合。在这个例子中,它是这样的:
expected_dict = {
'name': ['some name', 'some other name'],
'age': ['some age'],
'last_name': ['some last name']
}
我怎样才能在Python中执行此操作?
答案 0 :(得分:2)
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']})
答案 1 :(得分:1)
您可以使用内置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
(如this answer所示)比使用dict.setdefault()
更简单,更快捷。
collections.defaultdict
的工作:
第一次遇到每个密钥时,它不在映射中;因此,使用
default_factory
函数自动创建一个条目,该函数返回一个空列表。然后list.append()
操作将值附加到新列表。当再次遇到密钥时,查找会正常进行(返回该密钥的列表),list.append()
操作会向列表中添加另一个值。这种技术比使用dict.setdefault()
的等效技术更简单,更快速。
答案 2 :(得分:1)
bigD = {}
for element in dictList:
for key in element:
if key in bigD:
bigD[key].append(element[key])
else:
bigD[key] = element[key]
答案 3 :(得分:1)
您可以使用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']}
答案 4 :(得分:0)
非常简单。
dict = {}
list = [1,2,3]
dict['numbs'] = list
print(dict)
输出:
{'numbs': [1, 2, 3]}