检查字典的任何值是否与条件匹配

时间:2012-09-11 18:51:00

标签: python python-2.7

python程序员如何检查字典的任何值是否与条件匹配(在我的情况下大于0)。我正在寻找性能影响最小的“pythonic”方式。

我的字典:

pairs = { 'word1':0, 'word2':0, 'word3':2000, 'word4':64, 'word5':0, 'wordn':8 }

到目前为止,我使用过这两种(怪异的?)方法。

1

options = pairs.values() # extract values
for i in options:
    if i > 0:
        return True
return False

2

options = sorted(pairs.items(), key=lambda e: e[1], reverse=True) # rank from max to min
if options[0][1] > 0:
    return True
else:
    return False

2 个答案:

答案 0 :(得分:23)

您可以使用any [docs]

>>> pairs = { 'word1':0, 'word2':0, 'word3':2000, 'word4':64, 'word5':0, 'wordn':8 }
>>> any(v > 0 for v in pairs.itervalues())
True
>>> any(v > 3000 for v in pairs.itervalues())
False

另请参阅all [docs]

>>> all(v > 0 for v in pairs.itervalues())
False
>>> all(v < 3000 for v in pairs.itervalues())
True

由于您使用的是Python 2.7,.itervalues()可能比.values()略好,因为它不会创建新列表。

答案 1 :(得分:0)

Python 3.x Update
<块引用>

在 Python 3 中,映射上的直接迭代与在 Python 2 中的工作方式相同。没有基于方法的等价物 - Python 3 中 d.itervalues() 和 d.iteritems() 的语义等价物是 iter( d.values()) 和 iter(d.items()).

根据docs,您应该使用iter(d.values()),而不是d.itervalues()

>>> pairs = { 'word1':0, 'word2':0, 'word3':2000, 'word4':64, 'word5':0, 'wordn':8 }
>>> any(v > 0 for v in iter(pairs.values()))
True
>>> any(v > 3000 for v in iter(pairs.values()))
False