首页 > 解决方案 > 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

标签: python

解决方案


通过将字典视为列表并对其进行整体迭代以查找特定项目,您会给自己带来很多麻烦。当你停止这样做时,大部分代码都会消失,如果你构建一个字典以便能够轻松地在以下位置查找条目,其余代码就会消失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"]]

推荐阅读