假设我有一份水果总词典:
Fruits = {"apple":8, "banana":3, "lemon":5, "pineapple":2,}
我希望输出
["pineapple"]
因为菠萝价值最低。或者,如果我有这个:
Colour = {"blue":5, "green":2, "purple":6, "red":2}
输出将是:
["green","red"]
因为绿色和红色都具有最小值。
那么如何在字典中返回最小值?
答案 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']
另一种选择(需要一些导入,并且意味着如果需要,你可以使用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)