Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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中的sames键连接字典列表中的唯一值_Python_List_Dictionary_Python 3.x - Fatal编程技术网

用Python中的sames键连接字典列表中的唯一值

用Python中的sames键连接字典列表中的唯一值,python,list,dictionary,python-3.x,Python,List,Dictionary,Python 3.x,我正在使用字典列表,并尝试将它们合并为一个具有以下条件的字典: 列表中的词典都具有相同的键,新词典也将具有相同的键 如果所有字典中给定键的值相同,则该值将在新字典的值中出现一次 如果as字典中给定键的值是唯一的,则新字典中该键的值将是所有值的逗号分隔字符串 所以我真正要做的是在多个字典中为给定的键创建一个集合,并在新字典中为该集合的值创建一个逗号分隔的字符串。要帮助可视化,请提供: data = [ {"key1": "value1", "key2": "value2", "key3": "va

我正在使用字典列表,并尝试将它们合并为一个具有以下条件的字典:

列表中的词典都具有相同的键,新词典也将具有相同的键 如果所有字典中给定键的值相同,则该值将在新字典的值中出现一次 如果as字典中给定键的值是唯一的,则新字典中该键的值将是所有值的逗号分隔字符串 所以我真正要做的是在多个字典中为给定的键创建一个集合,并在新字典中为该集合的值创建一个逗号分隔的字符串。要帮助可视化,请提供:

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'}