Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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_Python 3.x_List_Loops_Dictionary - Fatal编程技术网

Python 获取共享相同列表值及其公共值的所有字典键的字典

Python 获取共享相同列表值及其公共值的所有字典键的字典,python,python-3.x,list,loops,dictionary,Python,Python 3.x,List,Loops,Dictionary,我有一个列表字典,希望将共享重复列表的键合并到一个字典中的单独列表中,该字典还包含它们共享的原始列表 我曾尝试使用适用于哈希类型的现有解决方案,例如当字典仅包含字符串作为值时。相关的,所以可以找到问题。每次我尝试这些解决方案中的任何一种,或者尝试使用类似技术的任何其他解决方案,都会导致一个不可修复的类型错误 下面是我的字典的一个例子 exampledict = {'FOO': [1, 2, 3, 4, 25, 9], 'BAR': [1, 2], 'BAZ': [1, 2], 'ABC': [1

我有一个列表字典,希望将共享重复列表的键合并到一个字典中的单独列表中,该字典还包含它们共享的原始列表

我曾尝试使用适用于哈希类型的现有解决方案,例如当字典仅包含字符串作为值时。相关的,所以可以找到问题。每次我尝试这些解决方案中的任何一种,或者尝试使用类似技术的任何其他解决方案,都会导致一个不可修复的类型错误

下面是我的字典的一个例子

exampledict = {'FOO': [1, 2, 3, 4, 25, 9], 'BAR': [1, 2], 'BAZ': [1, 2], 'ABC': [1, 2, 3, 4, 25, 9]}
正确的输出应该是两个字典:

finaldict1 = {'keys': ['BAR', 'BAZ'], 'value': [1, 2]}
finaldict2 = {'keys': ['FOO', 'ABC'], 'value': [1, 2, 3, 4, 25, 9]}
您可以尝试:

from operator import itemgetter
from itertools import groupby

final_dicts = [{'keys': [e[0] for e in v], 'value': k} for k, v in groupby(sorted(exampledict.items(), key=itemgetter(1)), key=itemgetter(1))]
finaldict1 , finaldict2 = final_dicts

print(finaldict1)
print(finaldict2)
输出:

{'keys': ['BAR', 'BAZ'], 'value': [1, 2]}
{'keys': ['FOO', 'ABC'], 'value': [1, 2, 3, 4, 25, 9]}
在本例中,恰好您有2个dicts,但您可以根据需要使用final_dicts变量

Ex.

from collections import defaultdict
exampledict = {'FOO': [1, 2, 3, 4, 25, 9], 'BAR': [1, 2], 'BAZ': [1, 2], 'ABC': [1, 2, 3, 4, 25, 9]}
newMap = defaultdict(set)
for key, value in exampledict.items():
    newMap[tuple(value)].add(key)

result = [{'keys':list(newMap[x]),'value':list(x)} for x in newMap ]
print(result)
O/p:

[{'keys': ['FOO', 'ABC'], 'value': [1, 2, 3, 4, 25, 9]}, {'keys': ['BAR', 'BAZ'], 'value': [1, 2]}]

你们试过什么了吗?在你们和你们的问题给出的链接中,不同之处在于,在你们的案例中,值是列表,而在已经回答的问题中,值是词典。这就不同了。您必须比较值(列表)是否相等