如何返回字典中最小值对应的键列表

2024-07-07 06:43:25 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一本水果总量字典:

Fruits = {"apple":8, "banana":3, "lemon":5, "pineapple":2,}

我希望输出是

["pineapple"]

因为菠萝的价值最低。或者如果我有这个:

Colour = {"blue":5, "green":2, "purple":6, "red":2}

输出将是:

["green","red"]

因为绿色和红色的值都最小

那么如何返回字典中的最小值呢


Tags: apple字典greenblueredlemonbanana价值
3条回答

只是一个选择:

from collections import defaultdict
from operator import itemgetter

Fruits = {"apple":8, "banana":3, "lemon":5, "pineapple":2,}
Colour = {"blue":5, "green":2, "purple":6, "red":2}


def get_res(dVals):
    res = defaultdict(list)
    for k, v in dVals.items():
        res[v].append(k)
    return min(res.items(), key=itemgetter(0))[1]

print get_res(Fruits)
print get_res(Colour)

我想说,最好的选择是两次传球:

min_value = min(dict.values())
result = [key for key, value in dict.iteritems() if value == min_value]

可以通过显式循环进行单次传递:

result = []
min_value = None
for key, value in dict.iteritems():
    if min_value is None or value < min_value:
        min_value = value
        result = []
    if value == min_value:
        result.append(key)

但这将是缓慢的(除了可能在PyPy中)

可以通过两次传递完成:

>>> colour
{'blue': 5, 'purple': 6, 'green': 2, 'red': 2}
>>> min_val = min(colour.itervalues())
>>> [k for k, v in colour.iteritems() if v == min_val]
['green', 'red']
  1. 查找dict值的最小值
  2. 然后返回并提取该值所在的键

另一种方法(需要一些导入,这意味着如果需要,您可以选择n多个)-此代码只选择第一个(即最小值):

from itertools import groupby
from operator import itemgetter

ordered = sorted(colour.iteritems(), key=itemgetter(1))
bykey = groupby(ordered, key=itemgetter(1))
print map(itemgetter(0), next(bykey)[1])
# ['green', 'red']

相关问题 更多 >