python - 如何避免 "RuntimeError: dictionary changed si

我检查了所有其他问题都存在相同的错误,但没有找到有用的解决方案 =/

我有一本列表字典:

d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}

其中一些值为空。在创建这些列表结束时,我想在返回我的字典之前删除这些空列表。目前我正在尝试这样做:

for i in d:
    if not d[i]:
        d.pop(i)

但是,这给了我运行时错误。我知道您在遍历字典时无法在字典中添加/删除元素......那么有什么方法可以解决这个问题?


见 Modifying a Python dict while iterating over it对于这可能导致问题的引用,以及原因。

最佳答案

在 Python 3.x 和 2.x 中,您可以使用 list强制复制 key :

for i in list(d):

在 Python 2.x 中调用 keys复制了您可以在修改 dict 时迭代的键:

for i in d.keys():

但请注意,在 Python 3.x 中,第二种方法对您的错误没有帮助,因为 keys 返回一个 view object而不是将键复制到列表中。

关于python - 如何避免 "RuntimeError: dictionary changed size during iteration"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11941817/

相关文章:

linux - 对标准输入、标准输出和标准错误感到困惑?

python - 如何并行化一个简单的 Python 循环?

linux - 遍历带有空格的文件列表

python - 将 numpy dtypes 转换为原生 python 类型

linux - `set -x` 有什么作用?

python - 在 TensorFlow 中,Session.run() 和 Tensor.eva

linux - fork()、vfork()、exec()和clone()的区别

python - 如何在正则表达式中使用变量?

linux - 增加 Linux 中 TCP/IP 连接的最大数量

python - python - 如何按两列或多列对python pandas中的dataFram