我坚持这个简单的任务。我有一个列表列表,我需要将它转换为字典,但到目前为止没有任何成功。
我尝试使用下面的代码,但它给了我KeyError:0
list = [[3,0,7,4,5],[2,3,0,1,2],[6,6,7,6,6]]
d = {}
for x in list:
i = 0
for number in x:
d[i].append(number)
i += 1
我需要它像这样:
{0: [3,2,6], 1: [0,3,6], 2: [7,0,7], 3: [4,1,6], 4: [5,2,6]}
感谢任何帮助,提前谢谢!
答案 0 :(得分:4)
作为旁注,您可以使用enumerate
和zip
函数轻松完成此操作。
lst = [[3, 0, 7, 4, 5], [2, 3, 0, 1, 2], [6, 6, 7, 6, 6]]
d = dict(enumerate(zip(*lst)))
zip(*lst)
基本上是转置功能。它返回Python 2中的列表,或Python 3中的zip
对象,可以将其转换为等效列表。
[(3, 2, 6), (0, 3, 6), (7, 0, 7), (4, 1, 6), (5, 2, 6)]
enumerate()
基本上只是在它之前添加元素的索引,并返回一个enumerate
对象,当转换为列表时返回一个元组列表。
[(0, (3, 2, 6)), (1, (0, 3, 6)), (2, (7, 0, 7)), (3, (4, 1, 6)), (4, (5, 2, 6))]
dict()
获取元组列表并将其转换为键/值对。
{0: (3, 2, 6), 1: (0, 3, 6), 2: (7, 0, 7), 3: (4, 1, 6), 4: (5, 2, 6)}
答案 1 :(得分:2)
请不要将内置插件用作ID。
>>> lst = [[3, 0, 7, 4, 5], [2, 3, 0, 1, 2], [6, 6, 7, 6, 6]]
您第一次打电话时收到KeyError
:
d[i].append(number)
这是因为i
中没有键d
。让我们看看使用enumerate()
和zip()
,而不是修复此代码,这可能更像是“Pythonic”:
>>> d = dict(enumerate(zip(*lst)))
>>> d
{0: (3, 2, 6), 1: (0, 3, 6), 2: (7, 0, 7), 3: (4, 1, 6), 4: (5, 2, 6)}
对于新的Python用户来说,这可能有点令人生畏。让我分解一下。
>>> zip(*lst)
[(3, 2, 6), (0, 3, 6), (7, 0, 7), (4, 1, 6), (5, 2, 6)]
此unpacks列表zip()
,将三个较小的列表“拉链”在一起。
>>> enumerate(zip(*lst)
返回对的迭代器。每对都是一个索引(从0开始)和输入中的项目。
>>> dict(enumerate(zip(*lst)))
dict()
函数返回一个新的字典对象,使用传入的键值对进行初始化。