用Python中的sames键连接字典列表中的唯一值
我正在使用字典列表,并尝试将它们合并为一个具有以下条件的字典: 列表中的词典都具有相同的键,新词典也将具有相同的键 如果所有字典中给定键的值相同,则该值将在新字典的值中出现一次 如果as字典中给定键的值是唯一的,则新字典中该键的值将是所有值的逗号分隔字符串 所以我真正要做的是在多个字典中为给定的键创建一个集合,并在新字典中为该集合的值创建一个逗号分隔的字符串。要帮助可视化,请提供:用Python中的sames键连接字典列表中的唯一值,python,list,dictionary,python-3.x,Python,List,Dictionary,Python 3.x,我正在使用字典列表,并尝试将它们合并为一个具有以下条件的字典: 列表中的词典都具有相同的键,新词典也将具有相同的键 如果所有字典中给定键的值相同,则该值将在新字典的值中出现一次 如果as字典中给定键的值是唯一的,则新字典中该键的值将是所有值的逗号分隔字符串 所以我真正要做的是在多个字典中为给定的键创建一个集合,并在新字典中为该集合的值创建一个逗号分隔的字符串。要帮助可视化,请提供: data = [ {"key1": "value1", "key2": "value2", "key3": "va
data = [ {"key1": "value1", "key2": "value2", "key3": "value3"},
{"key1": "value4", "key2": "value5", "key3": "value3"},
{"key1": "value1", "key2": "value8", "key3": "value3"} ]
我想用数据制作一个新的字典,如下所示:
myDict = {"key1": "value1, value4", "key2": "value2, value5, value8", "key3": "value3"}
关于如何实现这一点,有什么想法吗?我在这里假设了两件事——值的顺序对您来说并不重要,而且您并不想在我用键3替换的每个字典中都有两个相同的键: collections.defaultdict是您的朋友
from collections import defaultdict
temp_dict = defaultdict(set)
for item in data:
for key, value in item.items():
temp_dict[key].add(value)
这将为您提供一个格式为{key1:[value1,value4]}的dict-如果您需要实际的逗号分隔字符串作为值,则可以将它们连接起来:
my_dict = {}
for key, value in temp_dict.items():
my_dict[key] = ", ".join(value)
我以前怎么没见过迪克特?这是最正义的+我给你的。也是很酷的解决方案。与nates一起使用,因为它稍微更直接一些,但这太棒了。谢谢
my_dict = {}
for key, value in temp_dict.items():
my_dict[key] = ", ".join(value)
In [3]: from itertools import chain
In [12]: dict([ (key, ",".join(set([elem[key] for elem in data]))) for key in set(list(chain(*[d.keys() for d in data])))])
Out[12]: {'key1': 'value4,value1', 'key2': 'value5,value2,value8', 'key3': 'value3'}