使用来自列表列表的键/值创建字典

时间:2014-11-20 07:04:29

标签: python list python-3.x dictionary collections

假设我有一份清单清单:

ll = [
         ['a', 'b', 'c'],
         [1, 2, 3],
         [4, 5, 6],
         [7, 8, 9]
     ]

我想将其转换为字典:

dl = dict(
    a = [1, 4, 7],
    b = [2, 5, 8],
    c = [3, 6, 9]
)

我目前有以下代码执行此操作:

dl = dict((k, 0) for k in ll[0])
for i in range(1, len(ll)):
    for j in range(0, len(ll[0])):
        dl[ll[0][j]].append(ll[i][j])

有更简单/优雅的方法吗?

我正在使用Python 3,如果这很重要。

1 个答案:

答案 0 :(得分:4)

zip()

使用字典理解
>>> {k: v for k, *v in zip(*ll)}
{'c': [3, 6, 9], 'a': [1, 4, 7], 'b': [2, 5, 8]}

此处zip()使用splat运算符(*)转置列表项:

>>> list(zip(*ll))
[('a', 1, 4, 7), ('b', 2, 5, 8), ('c', 3, 6, 9)]

现在我们可以通过zip循环遍历此迭代器,并使用Python 3中引入的extended iterable packing,我们可以从每个元组中非常干净地获取键和值。