从python中的字典中删除某些键

Mar*_*ret 12 python dictionary python-3.x

我正在尝试构建一个包含一系列集合的字典:

{Field1:{Value1, Value2, Value3}, Field2{Value4}}
Run Code Online (Sandbox Code Playgroud)

麻烦的是,我希望从字典中删除集合中只有一个值的任何字段.我一直在编写这样的代码:

for field in FieldSet:
    if len(FieldSet[field]) == 1:
        del(FieldSet[field])
Run Code Online (Sandbox Code Playgroud)

但收到错误"RuntimeError:字典在执行期间改变了大小".(这并不奇怪,因为那就是我正在做的事情.)如果我不得不采取某种解决方法,那不是全部和最终的结果,但有可能做到这一点吗?

Amb*_*ber 22

迭代返回值.keys().由于您获得了一个键列表,因此在调用它之后更改字典不会影响它.

  • 在这种情况下,列表转换是必要的,因为生成器被延迟评估,因此就其本身而言,它易于在迭代中进行修改.转换为列表会在迭代开始之前拉出所有键. (8认同)
  • 我实际上使用的是python3,因此更正的行是:for list in field(FieldSet.keys()): (2认同)

Ale*_*lli 14

有时候更改的替代方案FieldSet有时(取决于执行的更改的数量)来构建新的并将其绑定到现有名称:

FieldSet = dict((k, v) for k, v in FieldSet.iteritems()
                if len(v) != 1)
Run Code Online (Sandbox Code Playgroud)