我有一个列表的字典,并希望将共享重复列表的关键字合并为字典中的单独列表,该字典还包含它们都共享的原始列表。
我尝试使用现有的解决方案来处理hashable类型,例如当字典只包含字符串作为值时。相关的SO问题可以在here找到。每次我尝试这些解决方案中的任何一个或任何其他我尝试过的类似技术时,都会导致无法处理的类型错误。
这是我的字典的一个例子。
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]}发布于 2019-08-22 13:23:01
您可以尝试:
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]}在本例中,恰好您有两个dict,但是您可以根据需要使用final_dicts变量
发布于 2019-08-22 13:36:42
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]}]https://stackoverflow.com/questions/57602376
复制相似问题