2012-12-30 64 views
19

Tôi đang cố gắng lấy khóa dict trong đó giá trị của nó là giá trị tối đa trong tất cả giá trị của dict. Tôi tìm thấy hai cách, cả hai đều không đủ thanh lịch.Lấy khóa dict bằng giá trị tối đa

d= {'a':2,'b':5,'c':3} 
# 1st way 
print [k for k in d.keys() if d[k] == max(d.values())][0] 
# 2nd way 
print Counter(d).most_common(1)[0][0] 

Có cách tiếp cận nào tốt hơn không?

Trả lời

57

Sử dụng key tham số để max():

max(d, key=d.get) 

Demo:

>>> d= {'a':2,'b':5,'c':3} 
>>> max(d, key=d.get) 
'b' 

Tham số key mất một chức năng, và cho mỗi mục trong iterable, nó sẽ tìm thấy một mà hàm key trả về giá trị cao nhất.

+0

Điều gì xảy ra nếu có nhiều khóa? Tôi có thể vượt qua, nói, 'len' để có được chìa khóa dài nhất với giá trị nhất? – SiddharthaRT

+0

@SiddharthaRT: bạn có thể sử dụng 'lambda' cho khóa:' max (d, khóa = lamda k: (d [k], len (k))) 'sẽ trả về khóa có giá trị cao nhất và nếu có là nhiều hơn một khóa như vậy, nó sẽ là chìa khóa dài nhất của những người được trả về. –

Các vấn đề liên quan