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

时间:2010-05-10 04:50:18

标签: python dictionary python-3.x

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

{Field1:{Value1, Value2, Value3}, Field2{Value4}}

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

for field in FieldSet:
    if len(FieldSet[field]) == 1:
        del(FieldSet[field])

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

3 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:14)

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

FieldSet = dict((k, v) for k, v in FieldSet.iteritems()
                if len(v) != 1)

答案 2 :(得分:1)

有pop方法。它删除了键调用的元素。关于你的例子,这看起来像:

for field in FieldSet.keys():
    if len(FieldSet[field]) == 1:
        FieldSet.pop(field)

这是在python 3.2中,但我不确定它是否是一个新功能: http://docs.python.org/dev/library/stdtypes.html#dict.pop

刚尝试过,它就像宣传的一样。