大多数pythonic方式确定最低计数

时间:2018-05-25 02:48:23

标签: python iteration

我发现自己想要在迭代字典时保持最低/最大计数。

例如:

d = {
    'Bob': 2000,
    'Larry': 6000,
    'Mary': 5
}

lowest_value = 1000000
list_of_keys = []

for key, value in d.items():
    if value > 100:
        list_of_keys.append(key)
        if value < lowest_value:
            lowest_value = value

不是将我的lowest_value设置为肯定会大于第一个if value < lowest_value:的数字,而是有更好的方法吗?

对于largest_count我通常只能使用0或-1。

4 个答案:

答案 0 :(得分:5)

您可以使用min()max()之类的:

代码:

min(d.values())

测试代码:

d = {
    'Bob': 2000,
    'Larry': 6000,
    'Mary': 5
}
print(min(d.values()))

结果:

5

答案 1 :(得分:3)

您可以from math import inf使用inf而不是某个临时号码。 Ints在Python中与浮点数进行比较。

答案 2 :(得分:2)

Python的内置min可以采用迭代。您也可以将> 100过滤器放在genexpr中。 Python dicts也可以只返回一个可迭代的值,因为你不关心键。

lowest_value = min(value for value in d.values() if value > 100)

您可以单独获取列表中的键列表。

list_of_keys = [key for key, value in d.items() if value > 100]

这会迭代两次,但除非您的dict非常大,否则就行了(在这种情况下,请考虑使用pandas数据帧。)

为避免重复过滤步骤,您可以先使用dict comp。

d2 = {k: v for k, v in d.items() if v > 100}
lowest_value = min(d2.values())
list_of_keys = list(d2.keys())

答案 3 :(得分:-1)

单行。

ks, low = [f(i) for f, i in zip([list, min], zip(*((k, v) for k, v in d.items() if v>100)))]