python - 如何解决需要更新字典的问题

标签 python dictionary runtime-error

我需要在循环中从字典中删除一个 k/v 对。在得到 RuntimeError: dictionary changed size during iteration 之后,我在删除 k/v 后腌制了字典,并在其中一个外部循环中尝试重新打开新腌制/更新的字典。然而,正如你们中的许多人可能知道的那样——我得到了同样的错误——我认为当它到达循环的顶部时。我不在最外层循环中使用我的字典。

所以我的问题是 - 有谁知道如何解决这个问题?我想从字典中删除一个 k/V 对,并在循环的下一次迭代中使用调整大小的字典。

聚焦问题并使用 Cygil 的解决方案

list=[27,29,23,30,3,5,40]
testDict={}
for x in range(25):
    tempDict={}
    tempDict['xsquared']=x*x
    tempDict['xinverse']=1.0/(x+1.0)
    testDict[(x,x+1)]=tempDict

for item in list:
    print 'the Dictionary now has',len(testDict.keys()), ' keys'
    for key in testDict.keys():
        if key[0]==item:

        del testDict[key]

我这样做是因为我必须让一些研究助理比较来自两个数据集的一些观察结果,这两个数据集由于名称不同而无法匹配。这个想法是从一个数据集(比如集合 A)中抛出一个名字,然后根据键匹配找到另一个数据集(集合 B)中附加到该键的所有名字。一个匹配项已经确定,我不想再次显示 B 的值来​​加快他们的速度。因为有 6,000 个观察结果,我也不希望他们每次恢复工作时都必须从 A 的开头开始。但是,我可以通过让他们选择输入他们使用的 A 的最后一个 key 来解决这个问题。但是一旦匹配被确定,我真的需要减少 B

最佳答案

如果没有代码,我假设您正在编写如下内容:

for key in dict:
    if check_condition(dict[key]):
       del dict[key]

如果是这样,你可以写

for key in list(dict.keys()):
    if key in dict and check_condition(dict[key]):
        del dict[key]

list(dict.keys()) 返回键的副本,而不是 View ,这使得从字典中删除成为可能(您正在遍历键的副本,而不是字典本身的键,在这种情况下。)

关于python - 如何解决需要更新字典的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/712225/

相关文章:

python - 如何在 Python 3.6 中的 tarfile 对象上使用 csv.DictReader?

Python:如何知道两个字典是否具有相同的键

python - 如何返回一个以列表作为值的字典,但它只返回键

c - “由于超时而终止”。需要帮助优化我的代码

c++ - 不可重现的运行时错误 - 一般方法?

java - 二进制 XML 文件行 #5 : Error inflating custom View class SlidingTabLayout

c++ - Visual Studio C++ : Debug Assertion Failed

python - 如何使用 libcloud 获取 openstack 风格的 cpu 信息?

python - Django 基于类的 View : How do I pass additional parameters to the as_view method?

c# - 为什么当我在 LINQ to Entities 查询中使用 GroupBy() 时,结果中的导航属性为空?