使用第二个列表作为关键字从列表中创建字典

时间:2019-06-04 13:16:16

标签: python dictionary

我有一个列名列表,以及一个我想变成嵌套字典的列表,其中每个内部列表都包含列名作为键。通过应用下面的代码,我遇到了与真实数据相同的问题-我获得了正确的key:value对,但仅适用于最后一个列表。

我认为尝试的方法是一种非常简单的方法(太简单了吗?)。我愿意采取任何方式来做到这一点,最好不要使用第三方程序包,但是出于学习的目的,我想知道为什么这行不通。

keys = [1, 2, 3]
list_of_lists = [['A', 'B', 'C'], ['D', 'E', 'F']]

for x in list_of_lists:
    test = dict(zip(keys, x))

print(test)

所需的输出:

{{1: 'A', 2: 'B', 3: 'C'}, {1: 'D', 2: 'E', 3: 'F'}}

实际输出:

{1: 'D', 2: 'E', 3: 'F'}

4 个答案:

答案 0 :(得分:2)

keys = [1, 2, 3]
list_of_lists = [['A', 'B', 'C'], ['D', 'E', 'F']]
test = []

for x in list_of_lists:
    test.append(dict(zip(keys, x)))

print(test)

这给出了字典列表。

输出:

[{1: 'A', 2: 'B', 3: 'C'}, {1: 'D', 2: 'E', 3: 'F'}]     

嵌套字典将要求您为每个内部元素具有键。在下面的示例中,我使用count作为键。

keys = [1, 2, 3]
list_of_lists = [['A', 'B', 'C'], ['D', 'E', 'F']]
test = {}
count = 0

for x in list_of_lists:
    test[count] = dict(zip(keys, x))
    count = count + 1

print(test)

输出:

{0: {1: 'A', 2: 'B', 3: 'C'}, 1: {1: 'D', 2: 'E', 3: 'F'}}

答案 1 :(得分:2)

如果您确实想要的是字典的列表,那么一个简单的单行代码即可:

keys = [1, 2, 3]
list_of_lists = [['A', 'B', 'C'], ['D', 'E', 'F']]

print([dict(zip(keys, values)) for values in list_of_lists])
# [{1: 'A', 2: 'B', 3: 'C'}, {1: 'D', 2: 'E', 3: 'F'}]

答案 2 :(得分:1)

不幸的是,您期望的输出显示的是一组字典,并且如果字典不可散列,则将不起作用。

或者,您可以列出字典列表或元组:

test = [{k:v for k, v in zip(keys, l)} for l in list_of_lists]
#[{1: 'A', 2: 'B', 3: 'C'}, {1: 'D', 2: 'E', 3: 'F'}]

或者是一个字典,外部字典的键是外部列表的枚举

test = {i: {k:v for k, v in zip(keys, l)} for i, l in enumerate(list_of_lists)}
#{0: {1: 'A', 2: 'B', 3: 'C'}, 1: {1: 'D', 2: 'E', 3: 'F'}}

答案 3 :(得分:0)

最好将字典放在列表中。

[dict(zip(keys, x)) for x in list_of_lists]

我不确定,也许您会对订单感兴趣,然后您可能想尝试

{i:x for i, x in zip(range(len(list_of_lists)), list_of_lists)}

希望这会有所帮助

编辑: 更改了字典响应代码