我需要将两个列表转换为字典。我有两个名为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的新手。
答案 0 :(得分:1)
很难确定,但我猜你的问题是这样的:
如果a
和b
只是数字的平面列表,那么您所要做的就是:
dict(zip(a, b))
我认为这与你所写的相似。但这并不适用于此。那些不是数字的列表,它们是列表的列表。而且你不想取回一个词典,你需要一个词典列表。
所以,你要求Python创建一个字典,其密钥是a
的子列表,其值是b
的子列表。这是一个错误,因为列表不能成为密钥,但即使这不是问题,它也不会有用。
要实际执行此操作,您不仅需要zip
向上a
和b
,还需要压缩其子列表,并传递这些子拉链,而不是主拉链,到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}]