2015-11-26 69 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