Python 堆叠字典列表
我在把一系列词典合并成一个输出时遇到了一个小问题 我有下列词典:Python 堆叠字典列表,python,list,python-3.x,dictionary,Python,List,Python 3.x,Dictionary,我在把一系列词典合并成一个输出时遇到了一个小问题 我有下列词典: listOfDicts = [{"name": "Andi", "toy": "puppet"}, {"name": "Andi", "toy": "monkey"},{"name": "Mum", "toy": "ape"}, {"name": "Mum", "toy": "sheep"}] 我想必须遵循ouput,这样对于“name”,我将“toy”组合在一个字段中。最终输出应为: finalDicts = [{"name"
listOfDicts = [{"name": "Andi", "toy": "puppet"}, {"name": "Andi", "toy": "monkey"},{"name": "Mum", "toy": "ape"}, {"name": "Mum", "toy": "sheep"}]
我想必须遵循ouput,这样对于“name”,我将“toy”组合在一个字段中。最终输出应为:
finalDicts = [{"name": "Andi", "toy": "puppet, monkey"}, {"name": "Mum", "toy": "ape, sheep"}]
如何在Python中实现这一点?一种非常程序化的方法是:
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\u store
。一种非常程序化的方法是:
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\u store
。您可以使用来收集项目:
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']]
然后,您只需从这些列表中创建一个列表,然后加入列表:
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
。你可以用正确的顺序。然后使用我在第二个代码块中展示的方法来创建它。您可以使用它来收集项目:
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']]
然后,您只需从这些列表中创建一个列表,然后加入列表:
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
。你可以用正确的顺序。然后使用我在第二个代码块中展示的方法创建它。名称的顺序应该保持不变吗?我建议使用列表来存储玩具,而不是单个逗号分隔的字符串。名称的顺序应该保持不变吗?我建议使用列表来存储玩具,而不是单个逗号分隔的字符串。