我使用两个列表,files
和g_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 :(得分:1)
列表不能用作词典中的键,因为它们是 mutable ,它们可以更改,因此无法进行哈希处理。好吧,他们可以进行哈希处理,但哈希可能会改变。由于字典依赖于散列其键是有效的,因此散列必须保持不变。然后,解决方案是使用元组,这与列表完全相同,只是它是不可变的。要将列表L
转换为元组,只需执行tuple(L)
。
答案 1 :(得分:1)
这是您尝试做的,但不导入其他库。
d = dict(zip(files, g_list))
files = d.keys()
g_list = d.values()