Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 堆叠字典列表_Python_List_Python 3.x_Dictionary - Fatal编程技术网

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
。你可以用正确的顺序。然后使用我在第二个代码块中展示的方法创建它。

名称的顺序应该保持不变吗?我建议使用列表来存储玩具,而不是单个逗号分隔的字符串。名称的顺序应该保持不变吗?我建议使用列表来存储玩具,而不是单个逗号分隔的字符串。