我有一本字典Python的 - 找到最高字典鍵與值大於零
{0: 12, 1: 1, 2: 13, 3: 7, 4: 0}
我想找到大於0
在這種情況下,最高值辭典鍵,答案是3.
這樣做的最佳方法是什麼?
我有一本字典Python的 - 找到最高字典鍵與值大於零
{0: 12, 1: 1, 2: 13, 3: 7, 4: 0}
我想找到大於0
在這種情況下,最高值辭典鍵,答案是3.
這樣做的最佳方法是什麼?
您可以使用max
和dict.items()
做到這一點:
d = {0: 12, 1: 1, 2: 13, 3: 7, 4: 0}
highest = max(i for i,j in d.items() if j > 0)
不能在空列表上調用max 。如果無返回,則返回錯誤。 – kpie
@kpie我會把它留給OP找出自己的想法。我已經回答了他們想要的問題。對於其他任何事情,他們應該開一個新的問題否則,只是我爲他們編寫完整的代碼。 –
這對我很好,謝謝 – Vermillion
使用genexpr濾除 「壞」 的價值觀,並max
記住這仍然是最高:
# On Py2, use .iteritems() instead of .items()
max(k for k, v in mydict.items() if v > 0)
或者如果您需要有一個默認值,如果沒有提供任何例外的密鑰條件,則不需要:
# Py3 max has default, which makes this super-easy:
max((k for k, v in mydict.items() if v > 0), default=SOMEVALUEGOESHERE)
# Py2 doesn't have default; workaround is to catch exception and use a default (EAFP):
try:
mymax = max(k for k, v in mydict.iteritems() if v > 0)
except ValueError:
mymax = SOMEVALUEGOESHERE
# Or if you can't do that for some reason, make a listcomp instead of genexpr
# and check for at least one surviving key before calling max (LBYL)
goodkeys = [k for k, v in mydict.iteritems() if v > 0]
mymax = max(goodkeys) if goodkeys else SOMEVALUEGOESHERE
不計入空列表異常。 – kpie
@kpie:嗯?那它呢?評論說沒有鑰匙將是否定的或非數字的,但是這與這裏的答案無關。它檢查值,並且(可選)處理'dict'沒有正值的鍵的可能性。 __Edit__:評論改變了,但是,我在發佈後立即添加了處理,這就是爲什麼'max'可以採用'默認'參數。 – ShadowRanger
默認不是python 2中max的一個選項。 – kpie
如果所有鍵都是負數或非數字,應該返回什麼? –
'max([i for i,j in k.items()if j> 0])' –
對於我的使用,鍵不會是負數或非數字 – Vermillion