在存储在dicts列表中的dicts中插入新值

时间:2018-01-15 00:06:25

标签: python

[{'name': None, 'price': None, 'shares': None},
 {'name': None, 'price': None, 'shares': None},
  {'name': None, 'price': None, 'shares': None},
  {'name': None, 'price': None, 'shares': None},

我有一个像这样的dicts列表和3个列表,我将其压缩为一个具有值ID的列表,以便进入相应的dict。

我以为我可以通过列表并使用for循环来更新值,但最终发生的事情是每个dict都更新为值列表中的最后一项

1 个答案:

答案 0 :(得分:1)

您可以使用您的dicts列表执行此操作。但正如cᴏʟᴅsᴘᴇᴇᴅ所说,你不需要初始化空结构。这里有两个解决方案,一个有一个,没有一个没有预先初始化。

示例数据:

names = ["Alice", "Bob", "Carol", "Eve"]
price = [1.00, 2.01, 3.02, 4.03]
shares = [10, 50, 80, 100]
data = zip(names, price, shares)

预先初始化:

frame = [{'name': None, 'price': None, 'shares': None},
         {'name': None, 'price': None, 'shares': None},
         {'name': None, 'price': None, 'shares': None},
         {'name': None, 'price': None, 'shares': None}]

dlist = list(data)

for i, d in enumerate(frame):
    for j, k in enumerate(d.keys()):
        d[k] = dlist[i][j]

frame
[{'name': 'Alice', 'price': 1.0, 'shares': 10},
 {'name': 'Bob', 'price': 2.01, 'shares': 50},
 {'name': 'Carol', 'price': 3.02, 'shares': 80},
 {'name': 'Eve', 'price': 4.03, 'shares': 100}]

没有预先初始化:

fields = ["name", "price", "shares"]
[{k:v for k, v in zip(fields, d)} for d in data]