假设我有一个包含以下内容的词典:
myDict = {'A':[1,2], 'B': [4,5], 'C': [1,2]}
我想创建一个新词典merged
,它通过具有相似的值来合并键,因此我的merged
将是:
merged ={['A', 'C']:[1:2], 'B':[4,5]}
我尝试使用此thread中建议的方法,但无法复制我需要的方法。
有什么建议吗?
答案 0 :(得分:1)
你所要求的是不可能的。您在假设词典中的键使用可变列表。由于无法对可变数据进行哈希处理,因此无法将它们用作字典键。
编辑,我去做你要求的事情,除了这里的钥匙都是元组。这段代码很乱,但你可以清理它。
myDict = {'A':[1,2],
'B': [4,5],
'C': [1,2],
'D': [1, 2],
}
myDict2 = {k: tuple(v) for k, v in myDict.items()}
print(myDict2) #turn all vlaues into hasable tuples
#make set of unique keys
unique = {tuple(v) for v in myDict.values()}
print(unique) #{(1, 2), (4, 5)}
"""
iterate over each value and make a temp shared_keys list tracking for which
keys the values are found. Add the new key, vlaue pairs into a new
dictionary"""
new_dict = {}
for value in unique:
shared_keys = []
for key in myDict:
if tuple(myDict[key]) == value:
shared_keys.append(key)
new_dict[tuple(shared_keys)] = value
print(new_dict) #{('A', 'C'): (1, 2), ('B',): (4, 5)}
#change the values back into mutable lists from tuples
final_dict = {k: list(v) for k, v in new_dict.items()}
print(final_dict)