dic = {'a':4, 'b':5, 'cd':5 }
我試圖找到:
- 最高值(先搜索最高值 =>
b,cd) - 最長的鍵(然后搜索最長的鍵 =>
'cd')
我使用以下代碼:
max_val = dic[max(dic, key=dic.get)]
maxDicVal = dict(filter(lambda x: x[1] == max_val, dic.items()))
maxDicKey = max(maxDicVal, key=len)
有沒有更好的方法來實作這一目標?
謝謝。
uj5u.com熱心網友回復:
然后,您可以根據值降序和鍵的長度降序對字典項進行排序。例如:
items = sorted(dic.items(), key=lambda v:(v[1], len(v[0])), reverse=True)
輸出:
[('cd', 5), ('b', 5), ('a', 4)]
然后就是maxDicKey_items[0][0]cd
uj5u.com熱心網友回復:
很大的進步
我們真的應該嘗試一次完成所有事情。缺點是代碼較多。下面將第一個鍵存盤在dic中,然后從第二個鍵開始cur迭代,如果我們找到一個大于與該鍵關聯的值的值,或者如果我們找到一個值等于該值的鍵、值對,則更新與 key 關聯,并且 key的長度大于 的長度。diccurcurcurcur
it = iter(dic)
cur = next(it) # the first key
for key in it: # iterate thr keys of dic, starting from second
if dic[key] > dic[cur] or (dic[key] == dic[cur] and len(key) > len(cur)):
cur = key
print(cur)
較小的改進
max_value = max(dic.values())
a = max((k for k in dic if dic[k] == max_value), key = len)
(k for k in dic if dic[k] == max_value)是一個產生鍵的生成器,dic它的值等于最大值。max(..., key = len)然后在這些鍵中選擇最大的字串。
由于上述快取,以上內容比單行代碼要快max(dic.values()):
a = max((k for k in dic if dic[k] == max(dic.values())), key = len)
計時
# EBDS
1.19 μs ± 3.26 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)
# oda (a smaller improvement)
759 ns ± 4.12 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)
# oda (a big improvement)
304 ns ± 0.953 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)
# Nick
648 ns ± 1.36 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/465157.html
上一篇:Python字典輸出未按預期列印
下一篇:字典制作奇怪的鍵:值對
