Python 创建包含字典的列表,这些字典的值是从不同的列表中顺序选择的

Python 创建包含字典的列表,这些字典的值是从不同的列表中顺序选择的,python,python-3.x,Python,Python 3.x,我试图创建一个字典列表,由相同的键和从不同列表中顺序选择的值组成 这里的解决方案对我没有帮助: , , ids=[8,9,10,11,12] 字段=['person'] 容器=[] 我得到的最接近的结果是: 对于ID中的i: append(dict(zip(字段,[i代表id中的i])) 其结果是: [{'person':8},{'person':8},{'person':8},{'person':8},{'person':8}] 我需要的是: [{'person':8},{'perso

我试图创建一个字典列表,由相同的键和从不同列表中顺序选择的值组成

这里的解决方案对我没有帮助: ,

,

ids=[8,9,10,11,12]
字段=['person']
容器=[]
我得到的最接近的结果是:

对于ID中的i:
append(dict(zip(字段,[i代表id中的i]))
其结果是:

[{'person':8},{'person':8},{'person':8},{'person':8},{'person':8}]
我需要的是:

[{'person':8},{'person':9},{'person':10},{'person':11},{'person':12}]

如果
字段
只有一个元素,而您已经在做列表理解,那么为什么还要麻烦
zip

container = [{field[0]: i} for i in ids]

如果
field
只有一个元素,而您已经在做列表理解,那么为什么还要麻烦使用
zip

container = [{field[0]: i} for i in ids]

您已经在使用
for
循环迭代
ids
,您也不需要理解列表

而且您不需要
zip
。它没有做任何有用的事情,因为它总是在到达最短序列的末尾时停止。由于
字段
只有一个元素,因此它只使用
[i for i in id]
的第一个元素,这就是为什么总是得到
8

for i in ids:
    container.append({field[0]: i})

您已经在使用
for
循环迭代
ids
,您也不需要理解列表

而且您不需要
zip
。它没有做任何有用的事情,因为它总是在到达最短序列的末尾时停止。由于
字段
只有一个元素,因此它只使用
[i for i in id]
的第一个元素,这就是为什么总是得到
8

for i in ids:
    container.append({field[0]: i})

如果有一个字段,则可以执行以下操作:

for i in ids:
    container.append(dict(zip(field, [i])))
对于多个字段项,可以执行以下操作:

from itertools import product
for i,j in product(ids, field):
    container.append(dict(zip([i],[j])))

如果有一个字段,则可以执行以下操作:

for i in ids:
    container.append(dict(zip(field, [i])))
对于多个字段项,可以执行以下操作:

from itertools import product
for i,j in product(ids, field):
    container.append(dict(zip([i],[j])))

如果id是连续的(您提到了顺序选择的值),您可以使用
范围
,此外,如果字段列表只有一个元素,为什么不直接使用字符串呢

那么这是一个简单的一行

print([{'person': i} for i in range(8, 13)])
#[{'person': 8}, {'person': 9}, {'person': 10}, {'person': 11}, {'person': 12}]
如果列表中有多个元素,则也不需要
zip

fields = ['person', 'animal']
print([{item: i} for i in range(8, 13) for item in fields])
#[{'person': 8}, {'animal': 8}, {'person': 9}, {'animal': 9}, {'person': 10}, {'animal': 10}, {'person': 11}, {'animal': 11}, {'person': 12}, {'animal': 12}]
另一种选择是


如果id是连续的(您提到了顺序选择的值),您可以使用
范围
,此外,如果字段列表只有一个元素,为什么不直接使用字符串呢

那么这是一个简单的一行

print([{'person': i} for i in range(8, 13)])
#[{'person': 8}, {'person': 9}, {'person': 10}, {'person': 11}, {'person': 12}]
如果列表中有多个元素,则也不需要
zip

fields = ['person', 'animal']
print([{item: i} for i in range(8, 13) for item in fields])
#[{'person': 8}, {'animal': 8}, {'person': 9}, {'animal': 9}, {'person': 10}, {'animal': 10}, {'person': 11}, {'animal': 11}, {'person': 12}, {'animal': 12}]
另一种选择是


如果有多个字段,该怎么办<代码>{person:8'foo:8}或
{person:8}{foo:8}
?如果有多个字段,该怎么办<代码>{'person':8,'foo':8}或
{person:8}{foo:8}
范围(8,14)
上升到13。
范围(8,14)
上升到13。