파이썬 사전이 있다면 최소값을 포함하는 항목의 키를 어떻게 얻습니까?
min()
함수 와 관련이 있다고 생각했습니다 …
주어진 입력 :
{320:1, 321:0, 322:3}
반환 321
합니다.
답변
최고 : min(d, key=d.get)
-쓸모없는 lambda
간접 레이어 를 삽입 하거나 항목 또는 키를 추출 할 이유가 없습니다 !
답변
OP가 요청한 솔루션을 실제로 제공하는 답변은 다음과 같습니다.
>>> d = {320:1, 321:0, 322:3}
>>> d.items()
[(320, 1), (321, 0), (322, 3)]
>>> # find the minimum by comparing the second element of each tuple
>>> min(d.items(), key=lambda x: x[1])
(321, 0)
사용 d.iteritems()
하지만, 더 큰 사전에 더 효율적입니다.
답변
가장 낮은 값을 가진 여러 키의 경우 목록 이해를 사용할 수 있습니다.
d = {320:1, 321:0, 322:3, 323:0}
minval = min(d.values())
res = [k for k, v in d.items() if v==minval]
[321, 323]
동등한 기능 버전 :
res = list(filter(lambda x: d[x]==minval, d))
답변
min(d.items(), key=lambda x: x[1])[0]
답변
>>> d = {320:1, 321:0, 322:3}
>>> min(d, key=lambda k: d[k])
321
답변
최소 키가 여러 개이고 단순하게 유지하려는 경우
def minimums(some_dict):
positions = [] # output variable
min_value = float("inf")
for k, v in some_dict.items():
if v == min_value:
positions.append(k)
if v < min_value:
min_value = v
positions = [] # output variable
positions.append(k)
return positions
minimums({'a':1, 'b':2, 'c':-1, 'd':0, 'e':-1})
['e', 'c']
답변
최소값이 여러 개인 지 확실하지 않은 경우 다음을 제안합니다.
d = {320:1, 321:0, 322:3, 323:0}
print ', '.join(str(key) for min_value in (min(d.values()),) for key in d if d[key]==min_value)
"""Output:
321, 323
"""