我有一个列表列表,每个列表中包含4个元素。
LoL=[[1,1,1,1],[4,2,3,[1,3]],[4,5,3,[0,4]]]
第4个元素可以是[0,4]
中[4,5,3,[0,4]]
等两个部分的列表。
我需要将其元素用作字典的键,
Pseudo code:
dic = { [1,1,1,1]:'a',[4,2,3,[1,3]]:'b',[4,5,3,[0,4]]:'c' }
因此尝试将其更改为tuple
s。
它适用于简单列表(如[1,1,1,1]
),但对于包含其他列表的列表(如[4,5,3,[0,4]]
),它会引发错误:
dic[tuple([1,1,1,1])]=['bla','blah']
print dic
{(1, 1, 1, 1): ['bla', 'blah']}
dic[tuple([4, 2, 3, [1, 3]])]=['blablah']
TypeError: unhashable type: 'list'
我需要稍后将这些键重新用作列表。因此,尝试将LoL的元素更改为字符串(例如,使用repr()
)不是一种选择!
编辑:
我知道为什么列表不能用作字典键。在dic
中,它们不会被更改。我只需要一些方法将它们传递给另一个模块来提取它们。
答案 0 :(得分:2)
只需将嵌套列表转换为嵌套元组即可。这是一个快速演示。它并不完美,但它确实有效。
#! /usr/bin/env python
LoL = [[1,1,1,1],[4,2,3,[1,3]],[4,5,3,[0,4]]]
def nested_list_to_tuple(nlist):
return tuple([nested_list_to_tuple(i) if isinstance(i, list) else i for i in nlist])
ToT = nested_list_to_tuple(LoL)
print ToT
<强>输出强>
((1, 1, 1, 1), (4, 2, 3, (1, 3)), (4, 5, 3, (0, 4)))
答案 1 :(得分:1)
只使用元组:
a = {}
a[(4, 2, 3, (1, 3))] = ['blablah']
print(a)
输出:
{(4, 2, 3, (1, 3)): ['blablah']}