结合两个列表来制作字典

时间:2014-09-25 23:51:38

标签: python

我需要将两个列表转换为字典。我有两个名为A和B的列表,

A = [[1,2,3] [2,3,4] [1,4,5] [1,3,4]]

A(列表清单)中的值将是唯一的

B = [[10,13,23] [22,21,12] [5,34,23] [10,9,8]]

两个列表的长度都相同

我需要像

这样的结果

C = [['1':10,'2':13,'3':23] ['2':22,'3':21,'4':12] ['1':5 ,'4':34,'5':23] ['1':10,'3':9,'4':8]]

我尝试了dict方法,但是它给我一个错误,说list是un hashable类型。请让我知道如何做到这一点。我是python的新手。

3 个答案:

答案 0 :(得分:1)

很难确定,但我猜你的问题是这样的:

如果ab只是数字的平面列表,那么您所要做的就是:

dict(zip(a, b))

我认为这与你所写的相似。但这并不适用于此。那些不是数字的列表,它们是列表的列表。而且你不想取回一个词典,你需要一个词典列表。

所以,你要求Python创建一个字典,其密钥是a的子列表,其值是b的子列表。这是一个错误,因为列表不能成为密钥,但即使这不是问题,它也不会有用。

要实际执行此操作,您不仅需要zip向上ab,还需要压缩其子列表,并传递这些子拉链,而不是主拉链,到dict。像这样:

[dict(zip(suba, subb)) for (suba, subb) in zip(a, b)]

答案 1 :(得分:0)

我认为您希望C成为词典列表。这是一种直截了当的方法。

def combine(keys, values):
    "generate a dictionary from keys and values"
    out = {}
    for k,v in zip(keys,values):
       out[k] = v
    return out

def combine_each(keys, values):
    "for each pair of keys and values, make a dictionary"
    return [combine(klist, vlist) for (klist,vlist) in zip(keys,values)]

C = combine_each(A,B)

答案 2 :(得分:0)

替代:

>>> A = [[1,2,3], [2,3,4], [1,4,5], [1,3,4]]
>>> B = [[10,13,23], [22,21,12], [5,34,23], [10,9,8]]
>>> [{k:v for k, v in zip(sa, sb)} for (sa, sb) in zip(A, B)]
[{1: 10, 2: 13, 3: 23}, {2: 22, 3: 21, 4: 12}, {1: 5, 4: 34, 5: 23}, {1: 10, 3: 9, 4: 8}]