过滤Python字典的非暴力方法是什么?

时间:2010-04-27 21:23:57

标签: python

我可以过滤以下字典,如:

data = {
    1: {'name': 'stackoverflow', 'traffic': 'high'},
    2: {'name': 'serverfault', 'traffic': 'low'},
    3: {'name': 'superuser', 'traffic': 'low'},
    4: {'name': 'mathoverflow', 'traffic': 'low'},
}

traffic = 'low'

for k, v in data.items():
    if v['traffic'] == traffic:
        print k, v

是否有另一种方法可以进行上述过滤?

4 个答案:

答案 0 :(得分:2)

当然,但他们都是蛮力。

dict((k, v) for (k, v) in data.iteritems() if v['traffic'] == traffic)

答案 1 :(得分:2)

在某种程度上,过滤器必须完全按照您的描述进行操作。如果您要对值进行过滤,则必须逐个处理每个值。

答案 2 :(得分:2)

如果你这么做很多,你可以有两个词典,每个方向一个。新字典会将值映射到值列表。如果您不止一次进行反向查找,这是个好主意。

答案 3 :(得分:1)

原则上 - 没有。您可以稍微重写代码,但它仍然会执行相同的操作 - 遍历所有值。