2017-06-06 51 views
0

比方說,我有一個包含以下內容的詞典:合併鍵

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

我想創建一個新的字典,merged通過具有類似值合併鑰匙,所以我merged是:

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

我一直在使用這個thread建議的方法試過,但不能複製我需要什麼。

有什麼建議嗎?

+0

我已經編輯了我的原始答案,讓你幾乎可以看到你所問的內容,但代碼卻是一團糟。 – Rosh

回答

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)