2014-09-25 101 views
-3

我需要将两个列表转换成字典。我已经两个列表命名为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] [1,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]]

我试过字典的方法,但它给我一个错误,说列表是不可排列的类型。请让我知道如何做到这一点。我新来python。

+0

你的输入是无效的名单,因为有子列表之间没有逗号。你的输出不是一个有效的东西,因为字符串放在大括号中,列表中没有冒号。另外,不要模糊地描述你的代码和错误信息,复制和粘贴实际的代码和错误。 – abarnert 2014-09-25 23:52:58

+0

@abarnert我的输入在子列表之间有逗号,而在这里输入时我错过了它。输出必须是子列表的字典。 – user3559583 2014-09-25 23:58:49

+0

请勿在此处输入,从显示您的问题的实际运行代码复制并粘贴。再次,不要_描述你的输出,显示你想要的实际输出。 “子列表字典”没有意义,它也不符合你的问题。我们可以试着去猜测你有什么和你想要什么,但是大多数人大多数时间都会猜错,因为我们太聪明了。 – abarnert 2014-09-26 00:01:21

回答

1

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

如果ab是数字只是平面列表,所有你需要做的是这样的:

dict(zip(a, b)) 

我假设这和你写的相似。但这在这里不起作用。这些不是数字清单,而是列表清单。而且你不回复字典,你需要一个字典清单。

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

要真正做到这一点,你不仅需要zipab,还拉上自己的子列表,并通过这些子呼啸而过,不是主要的拉链,以dict。像这样:

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

我明白了,它工作!谢谢你@abarnert :) :) – user3559583 2014-09-26 00:03:15

+0

我只是有一个更多的疑问,这是有效的方式来做到这一点? – user3559583 2014-09-26 00:04:09

+0

@ user3559583:高效的是什么意思?如果你的意思是速度,那么在任何真正的程序中都不太可能重要,所以这是你应该担心的最后一件事。担心能够理解代码,扩展代码等,或者减少必须重复自己的地方的数量或者可以引入细微错误的地方;除了效率,任何事 – abarnert 2014-09-26 00:11:00

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) 
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}]