英文:
Remove dictionary in list Python
问题
以下是翻译好的部分:
我有两个字典:output
包含一个主数据集,其中包括一列相关项目,而 output_historical
包含了 output
列表中项目的一个子集。
我想将 output_historical
键的值添加到 output
的值中,但如果 output_historical
中没有值,就删除整个列表项。在下面的过度简化示例中,{'test2': {'info': '1'}}
应该从 output
中删除。
output_historical = [
{'test1': {'result': 0},
'test3': {'result': 3}
}
]
output = [
{'tests':
[
{'test1': {'info': '0'}},
{'test2': {'info': '1'}},
{'test3': {'info': '2'}}
]
}
]
for item in output:
for testobject in item["tests"]:
for test in testobject.copy():
if test in output_historical[0]:
print("add", test)
testobject[test]["result"] = output_historical[0][test]["result"]
else:
print("del", test)
# del ??
print(output)
# 期望输出:[{'tests': [{'test1': {'info': '0', 'result': 0}}, {'test2': {'info': '1'}}, {'test3': {'info': '2', 'result': 3}}]}]
请注意,代码部分没有进行翻译。
英文:
I have two dictionaries: output
contains a main dataset including a list of relevant items and output_historical
contains a subset of the items in the list of output
.
I would like to add the value of the output_historical
keys to the output
values, but delete the whole list-item if there is no value in output_historical
. In the over-simplified example below, {'test2': {'info': '1'}}
should be deleted from output
.
output_historical = [
{
'test1': {'result': 0},
'test3': {'result': 3}
}
]
output = [
{'tests':
[
{'test1': {'info': '0'}},
{'test2': {'info': '1'}},
{'test3': {'info': '2'}}
]
}
]
for item in output:
for testobject in item["tests"]:
for test in testobject.copy():
if test in output_historical[0]:
print("add", test)
testobject[test]["result"] = output_historical[0][test]["result"]
else:
print("del", test)
# del ??
print(output)
# Expected output: [{'tests': [{'test1': {'info': '0', 'result': 0}}, {'test2': {'info': '1'}}, {'test3': {'info': '2', 'result': 3}}]}]
答案1
得分: 1
使用 remove()
方法。
由于不应从正在迭代的列表中删除元素,您应该在列表的副本上进行迭代。我认为您不需要复制 testobject
,因为您在该字典中从未添加或删除任何内容。
for item in output:
for testobject in item["tests"].copy():
for test in testobject:
if test in output_historical[0]:
print("add", test)
testobject[test]["result"] = output_historical[0][test]["result"]
else:
print("del", test)
item["tests"].remove(testobject)
break
英文:
Use the remove()
method.
Since you shouldn't remove from a list that you're iterating over, you should iterate over a copy of the list. I don't think you need to make a copy of testobject
, since you're never adding or removing anything in that dictionary.
for item in output:
for testobject in item["tests"].copy():
for test in testobject:
if test in output_historical[0]:
print("add", test)
testobject[test]["result"] = output_historical[0][test]["result"]
else:
print("del", test)
item["tests"].remove(testobject)
break
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论