我有一个列名列表,以及一个我想变成嵌套字典的列表,其中每个内部列表都包含列名作为键。通过应用下面的代码,我遇到了与真实数据相同的问题-我获得了正确的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'}
答案 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)}
希望这会有所帮助
编辑: 更改了字典响应代码