2017-02-16 36 views
0

我有一個字符串字典作爲不同字順序的關鍵字。 如何刪除重複的鍵(用不同的順序設置相同的單詞)? 這些值對於相同的鍵是相同的,所以只需要從中選擇1個。帶有不同字順序的字符串的字典

簡單的想法是使用set(words)作爲關鍵字,但字典不允許set作爲關鍵字。有沒有一種很好的方法來處理這個問題?

my_dict={'Hello tom': 2, 'tom Hello': 2, 'I ate apple': 4, 'ate I apple': 4, 'apple ate I':4} 

結果

my_dict_trimmed={'Hello tom': 2, 'I ate apple': 4} 

回答

2

任何時候你想散列一個集合,使用frozenset

output = dict() 
for key, value in dictionary.iteritems(): 
    new_key = frozenset(key.split()) 
    if new_key not in output.keys(): 
     output[new_key] = value 
+0

'forzenset'完美運作。謝謝 – notilas

+0

輸出中的鍵是'frozenset(key.split()')轉換鍵,它可能與原始字典中的任何鍵不匹配 - 如果重要,取決於如何閱讀*「如何刪除重複鍵用不同的順序設置相同的單詞)?「* - 沒有關於加擾你保留的那個 – f5r5e5d

1

使用frozenset這是不可改變的,可哈希。

+0

'forzenset'完美運作。謝謝 – notilas

0

嘗試:

my_dict={'Hello tom':2, 'tom Hello':2, 'I ate apple':4, 'ate I apple':4, 'apple ate I':4} 

my_dict_trimmed = dict() 

for k in my_dict: 
    if sorted(k) in map(sorted, my_dict_trimmed): 
     continue 
    else: 
     my_dict_trimmed[k] = my_dict[k] 

我希望這有助於。

0

我看到一個問題或兩個

只是用sorted失敗的字謎
的話需要分割

my_dict={'Hello tom':2, 'tom Hello':2, 'I ate apple':4, 'ate I apple':4, 'apple ate I':4} 

def MashedKey(k): 
    return tuple(sorted(k.split())) 

umsk = set([MashedKey(k) for k in my_dict.keys()]) # unique Mashed keys 

umsk 
Out[48]: {('Hello', 'tom'), ('I', 'apple', 'ate')} 

那麼鍵後進行排序,值對必須通過同一個鍵'mashing'函數從my_dict中檢索,這裏取第一個等號:

od = {} 
for u in umsk: 
    for k, v in my_dict.items(): 
     if MashedKey(k) == u: 
      od.update({k: v}) 
      break 

od 
Out[50]: {'Hello tom': 2, 'apple ate I': 4} 
相關問題