如何在字典中返回最小值?

时间:2013-04-19 07:09:13

标签: python dictionary

假设我有一份水果总词典:

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

我希望输出

["pineapple"]

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

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

输出将是:

["green","red"]

因为绿色和红色都具有最小值。

那么如何在字典中返回最小值?

8 个答案:

答案 0 :(得分:14)

可以做两遍:

>>> 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. 找到字典值的最小值
  2. 然后回过头来提取那个价值的钥匙......
  3. 另一种选择(需要一些导入,并且意味着如果需要,你可以使用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']
    

答案 1 :(得分:3)

我会说最好的选择是两次通过:

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中)

答案 2 :(得分:1)

只是一个选项:

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)

答案 3 :(得分:1)

正如我所看到的,它适用于像这样的脏lambda函数:

`min(Fruits,key=lambda x:Fruits[x]).`

我猜它只返回一个值,但仍然相当不错。 :)

答案 4 :(得分:0)

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

sorted_items = sorted(colors.items(), key=lambda t: t[1])
print (sorted_items)


min_val = sorted_items[0][1]

for t in sorted_items:
    if t[1] == min_val:
        print(t[0])
    else:
        break




--output:--
[('green', 2), ('red', 2), ('blue', 5), ('purple', 6)]

green
red

答案 5 :(得分:0)

import itertools
def getmin(dictionary):
    gen = ((j,i) for i,j in dictionary.iteritems())
    items = sorted(gen)
    minimum = items.pop(0)
    rest = itertools.takewhile(lambda item:item[0]==minimum[0],items)
    return [x[1] for x in itertools.chain([minimum],rest)]

此方法使用schwartzian transform来利用本机排序(无需密钥)。 它根据字典中键的值对项进行排序,取最小值,并采用所有相同的值。

答案 6 :(得分:0)

person.metadata.sources

答案 7 :(得分:0)

ans =[min(Fruits, key=Fruits.get)]
print(ans)

上方代码查找与词典中最小值对应的键。 它会找到字典(Fruits)的键,其中Fruits.get(key)函数等效于Fruits [key]返回可比较的最低值。

对于具有最小值的多个键,首先从字典Fruits中获取最小值,然后使用for循环从字典中获取对应的键,如下所示。

min_value= min(Fruits.values())
ans= [key for key in Fruits if Fruits[key]==min_value]
print(ans)