python - RuntimeError:字典改变了大小
问题描述
我有两个嵌套字典。每个字典都有一个相同的键/值对。我有一些代码说,嘿,如果它们相同,请使用其中一个字典中存在的另一个键/值组合更新现有字典到另一个字典。我收到错误 RuntimeError: dictionary changed size during iteration。我已经看到您可以使用 deepcopy 来解决这个问题,但是其他人还有其他想法吗?
performances = [
{'campaign_id': 'bob'},
{'campaign_id': 'alice'},
]
campaign_will_spend = [
{'id': 'bob'},
{'id': 'alice'},
]
for item in campaign_will_spend:
ad_dictt = dict()
for willspendkey, willspendvalue in item.items():
if willspendkey == "id":
for i in performances:
for key, value in i.items():
if key == 'campaign_id' and value == willspendvalue:
i['lifetime_budget'] = item
解决方案
通过将字典视为列表并对其进行整体迭代以查找特定项目,您会给自己带来很多麻烦。当你停止这样做时,大部分代码都会消失,如果你构建一个字典以便能够轻松地在以下位置查找条目,其余代码就会消失campaign_will_spend
:
# Easy lookup for campaign_will_spend dictionaries by id.
cws_by_id = {d['id']: d for d in campaign_will_spend}
for p in performances:
p["lifetime_budget"] = cws_by_id[p["campaign_id"]]
推荐阅读
- python - 从多索引问题中去除空格 - 我的代码还删除了索引名称
- python - If the user inputs a position over 5. It is supposed to print `The account number not found`
- kubernetes - Kubernetes 无法访问从节点的 pod
- node.js - 如何在 gulp 任务上创建一个空文件?
- mysql - 当我尝试查询数据数组时,节点中的 MariaDB SQL 抛出 ER_PARSE_ERROR
- c - 使用 printf 在 yacc 中打印字符串文字标记会导致分段错误
- excel - VBA查找方法不返回实际上存在于工作表中的值
- javascript - 使用来自 aysnc Javascript http 请求的数据?(AWS 无服务器)
- python - 如何在嵌套函数中共享函数变量?
- azure - Azure 搜索索引器以 0/0 个文档成功