我有一个字典列表,要在其中添加3个其他键值对。
词典列表
[
{'by': 270.74, 'by_l': [270.74], 'date_time': '2019-07-08 14:21:42', 'name': 'test_1', 't_avg': 29.69, 't_runs': [29.69]},
{'by': 432.17, 'by_l': [432.17], 'date_time': '2019-07-08 14:21:47', 'name': 'test_2', 't_avg': 47.39, 't_runs': [47.39]}
]
必须附加的内容
{'max': 70, 'min': 30, 'std_dev': 15.01},
{'max': 70, 'min': 30, 'std_dev': 15.01}`
看起来像这样:
[
{'by': 270.74, 'by_l': [270.74], 'date_time': '2019-07-08 14:21:42', 'name': 'test_1', 't_avg': 29.69, 't_runs': [29.69], 'max': 70, 'min': 30, 'std_dev': 15.016218454280247},
{'by': 432.17, 'by_l': [432.17], 'date_time': '2019-07-08 14:21:47', 'name': 'test_2', 't_avg': 47.39, 't_runs': [47.39], 'max': 70, 'min': 30, 'std_dev': 15.01}
]
由于我将max
,min
和std_dev
存储在各自的列表中,因此我尝试执行以下操作:
past_data = {
'max': 0,
'min': 0,
'std_dev': 0
}
for x in range(0, len(max_list)):
past_data['max'] = max_list[x]
past_data['min'] = min_list[x]
past_data['std_dev'] = std_dev_list[x]
output_data.append(past_data)
但是我得到以下输出:
[
{'by': 270.74, 'by_l': [270.74], 'date_time': '2019-07-08 14:21:42', 'name': 'test_1', 't_avg': 29.69, 't_runs': [29.69]},
{'by': 432.17, 'by_l': [432.17], 'date_time': '2019-07-08 14:21:47', 'name': 'test_2', 't_avg': 47.39, 't_runs': [47.39]},{'max': 70, 'min': 30, 'std_dev': 15.01}, {'max': 70, 'min': 30, 'std_dev': 15.01}
]
答案 0 :(得分:1)
我在这里看到两个问题:
1)您如何同步访问两个列表?
2)给定两个字典,如何将一个合并到另一个?
首先,zip
通常是最好的:
for (d1, d2) in zip(list_of_dictionary, max_list):
如果要使用显式列表索引,它看起来像:
for i in range(0, math.min(len(list_of_dictionary), len(max_list)):
d1 = list_of_dictionary[i]
d2 = max_list[i]
第二遍,使用update
将所有键/值对从一个字典复制到另一个字典。这样会使更新后的字典发生变异,因此无需建立新列表。
d1.update(d2)
如果您想避免编辑初始词典,则要困难一些。一种方式是这样的:
copied_data = {}
copied_data.update(d1)
# or just copied_data = d1.copy()
copied_data.update(d2)
output_data.append(copied_data)
有更多简洁的方法可以从现有的浅表副本构建新的dict,但就我个人而言,我认为很难遵循它们。
那会做一个浅表复制,这可能很好,但是可能会对您的by_l
值造成奇怪的结果-它将对同一列表对象的引用复制到新字典中,因此对该值进行更改也会使其发生更改原本的。但是,这可能不在本讨论范围之内。
答案 1 :(得分:0)
您可以一行完成
output_data = [{**a, **b} for a, b in zip(list_of_dictionary, max_list)]
这将从您的旧列表和新列表中获取每一对字典,并将两个字典合并为一个