使用list作为键从嵌套列表中删除重复项

时间:2015-11-26 00:42:48

标签: python collections

我使用两个列表,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']] 

2 个答案:

答案 0 :(得分:1)

列表不能用作词典中的键,因为它们是 mutable ,它们可以更改,因此无法进行哈希处理。好吧,他们可以进行哈希处理,但哈希可能会改变。由于字典依赖于散列其键是有效的,因此散列必须保持不变。然后,解决方案是使用元组,这与列表完全相同,只是它是不可变的。要将列表L转换为元组,只需执行tuple(L)

答案 1 :(得分:1)

这是您尝试做的,但不导入其他库。

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