不要与this question in Stackoverflow混淆。
我有一个名为a = [2, 3, 4, 1]
我有一些函数说func(),如下:
def func(a):
o = []
n = len(a)
for i in range(n):
x=a[:]
x[i],x[(i+1)%n] = x[(i+1)%n],x[i]
o.append(x)
return o
和func(a)生成另一个列表如下:
[[3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2]]
现在我想将输出列表映射到生成它的列表。那么,如何使用以下格式生成字典:
a : o
key : value1, value2........last value
[2, 3, 4, 1] : [3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2]
答案 0 :(得分:2)
字典中的键不能是可变类型。你可以改为使用元组。那是
(2, 3, 4, 1) : [3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2]
这可以作为
完成def func(a):
o = []
n = len(a)
for i in range(n):
x=a[:]
x[i],x[(i+1)%n] = x[(i+1)%n],x[i]
o.append(x)
return {tuple(a):o}
例如func([2,3,4,1])
现在将返回
{(2, 3, 4, 1): [[3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2]]}
另请注意:根据documentation:
唯一不能作为键接受的值是包含的值 列表或字典或其他可比较的类型 价值而不是对象的身份,原因在于 高效的字典实现需要密钥的哈希值 保持不变
发表评论编辑
您可以使用[]
表示法直接访问密钥。
E.g:
l = [2,3,4,1]
a = func(l)
print (a[tuple(l)])
这将打印值列表。
或者你可以遍历整个字典
for i in a.items():
for j in i:
print (j)
这将打印
[3, 2, 4, 1]
[2, 4, 3, 1]
[2, 3, 1, 4]
[1, 3, 4, 2]