我将一个字典列表合并到一个输出中时遇到了一些问题。
我有以下词典列表:
td
我想要跟随输出,以便" name"我把玩具和#34; s组合在一个领域。最终输出应为:
listOfDicts = [{"name": "Andi", "toy": "puppet"}, {"name": "Andi", "toy": "monkey"},{"name": "Mum", "toy": "ape"}, {"name": "Mum", "toy": "sheep"}]
我如何在Python中实现这一目标?
答案 0 :(得分:0)
一种非常程序化的方法是:
temp_store = {}
for element in listOfDicts:
temp_store[element["name"]] = temp_store.get(element["name"], []) + [element["toy"]]
finalDicts = [{"name": element, "toy": ", ".join(temp_store[element])} for element in temp_store]
如果您想保留订单,可以collections.OrderedDict
使用temp_store
。
答案 1 :(得分:0)
您可以使用collections.defaultdict
收集项目:
from collections import defaultdict
result = defaultdict(list)
for dct in listOfDicts:
result[dct['name']].append(dct['toy'])
print(result)
# defaultdict(list, {'Andi': ['puppet', 'monkey'], 'Mum': ['ape', 'sheep']})
如果您不想defaultdict
,可以使用普通字典完成同样的操作:
result = {}
for dct in listOfDicts:
try:
result[dct['name']].append(dct['toy'])
except KeyError:
result[dct['name']] = [dct['toy']]
然后你只需要从这些和join
列表中创建一个列表:
resultlist = [{'name': key, 'toy': ', '.join(value)} for key, value in result.items()]
print(resultlist)
# [{'name': 'Andi', 'toy': 'puppet, monkey'}, {'name': 'Mum', 'toy': 'ape, sheep'}]
然而,因为中间字典是"无序"结果可以在Mum
之前进行仲裁Andi
。您可以使用collections.OrderedDict
来确保正确的订购。然后使用我在第二个代码块中显示的方法来创建它。