通过同一字典中的公共值合并密钥

时间:2017-06-06 13:56:16

标签: python-3.x dictionary merge key

假设我有一个包含以下内容的词典:

myDict = {'A':[1,2], 'B': [4,5], 'C': [1,2]}

我想创建一个新词典merged,它通过具有相似的值来合并键,因此我的merged将是:

merged ={['A', 'C']:[1:2], 'B':[4,5]} 

我尝试使用此thread中建议的方法,但无法复制我需要的方法。

有什么建议吗?

1 个答案:

答案 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)