映射列表 - 在python中列为字典

时间:2014-12-26 18:11:07

标签: python list dictionary

不要与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]

1 个答案:

答案 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]