2015-11-26 52 views
0

我使用有兩個列表,filesg_list這都是常規列表從嵌套列表重複。我想刪除files中的重複項並且與g_list匹配。我發現這個解決方案;刪除使用列表作爲鍵

from collections import OrderedDict as odict  
od = odict.fromkeys(zip(files, g_list)) 
files, g_list = zip(*od) 

因爲我已經修改g_list是嵌套的列表,但現在當我運行上面的代碼中,我得到這個TypeError

File "/usr/lib/python2.7/collections.py", line 199, in fromkeys 
    self[key] = value 
File "/usr/lib/python2.7/collections.py", line 58, in __setitem__ 
    if key not in self: 
TypeError: unhashable type: 'list' 

如何解決這個問題?或者有另一種方式去做我想做的事情?

編輯:

輸入:

files = ['red', 'green', 'blue', 'green', 'yellow'] 
g_list = [['x','y'], ['z'], ['q','r','x'], ['z'], ['x', 'r']] 

所需的輸出:

files = ['red', 'green', 'blue', 'yellow'] 
g_list = [['x','y'], ['z'], ['q','r','x'], ['x', 'r']] 
+0

使用'tuple'代替。可以像'元組(my_list)' – ZWiki

+0

的可能的複製一樣簡單[類型錯誤:unhashable類型:「字典」,當用作另一字典密鑰字典(http://stackoverflow.com/questions/4531941/typeerror-不可拆分型字典當字典用作另一字典的關鍵字) – rll

+0

使用元組不會刪除重複項。前後的'len(files)'產生相同的結果。 – p014k

回答

1

在此之前,你想幹什麼,但是沒有導入其他庫。

d = dict(zip(files, g_list)) 
files = d.keys() 
g_list = d.values() 
1

解釋不能因爲它們是字典被用作鍵可變,它們是可以改變的,所以它們不能被散列。那麼他們可能會散列,但是這個散列可能會改變。由於字典依賴哈希鍵來高效,哈希必須保持不變。那麼解決方案就是使用一個元組,它與列表完全一樣,只是它是不可變的。要將列表L轉換爲元組,只需執行tuple(L)即可。

+0

尼斯的答案,你得到了我的贊成票 –

+0

[見註釋](http://stackoverflow.com/questions/33928870/remove-duplicates-from-nested-list-using-list-as-keys?noredirect=1# comment55618814_33928870) – p014k