开发者

Remove certain keys from a dictionary in python

I'm trying to construct a 开发者_如何学Pythondictionary that contains a series of sets:

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

The trouble is, I then wish to delete any fields from the dictionary that only have one value in the set. I have been writing code like this:

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

But receive the error "RuntimeError: dictionary changed size during execution". (Not surprising, since that's what I'm doing.) It's not the be-all and end-all if I have to knock together some sort of workaround, but is it possible to do this?


Iterate over the return value from .keys() instead. Since you get a list of keys back, it won't be affected by changing the dictionary after you've called it.


A sometimes-preferable alternative to changing FieldSet in place is sometimes (depending on the amount of alterations performed) to build a new one and bind it to the existing name:

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


There is the pop method. It removes the element that a key calls. With respect to your example this looks like:

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

This is in python 3.2, but I'm not sure if it's a new feature: http://docs.python.org/dev/library/stdtypes.html#dict.pop

Just tried it and it works as advertised.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜