簡體   English   中英

在具有非零值的字典中查找最大鍵的有效方法

[英]Efficient way to find the largest key in a dictionary with non-zero value

我是新來的 Python,正在嘗試以更 Pythonic 和更高效的方式實現代碼。 給定一個包含數字鍵和值的字典,找到具有非零值的最大鍵的最佳方法是什么?

謝謝

這樣的事情應該相當快:

>>> x = {0: 5, 1: 7, 2: 0}
>>> max(k for k, v in x.iteritems() if v != 0)
1

(刪除!= 0會稍快一點,但在某種程度上模糊了這個含義。)

要獲得最大的密鑰,您可以使用max函數並檢查這樣的密鑰:

max(x.iterkeys())

要篩選出值為0的值,可以使用生成器表達式

(k for k, v in x.iteritems() if v != 0)

你可以將它們組合起來得到你想要的東西(因為max只接受一個參數,可以刪除生成器表達式周圍的括號):

max(k for k, v in x.iteritems() if v != 0)

Python的max函數采用key=參數作為“measure”函數。

data = {1: 25, 0: 75}
def keymeasure(key):
    return data[key] and key

print max(data, key=keymeasure)

使用內聯lambda來實現相同的效果和相同的局部變量綁定:

print max(data, key=(lambda k: data[k] and k))

最后一種方法是將本地var綁定到匿名密鑰函數中

print max(data, key=(lambda k, mapping=data: mapping[k] and k))

如果我是你,速度是一個大問題,我可能會創建一個新的容器類“DictMax”,通過內部堆棧索引跟蹤它的最大非零值元素,其中頂部元素stack始終是字典中最大元素的關鍵。 這樣你就可以每次都獲得恆定時間內最大的元素。

  list=[1, 1, 2, 3,3]
  s={items:list.count(items)for items in list} ##occurrence of list 
  largest_value=max(k for k, v in s.items() if v != 0) #largest number occurrence 
  print(largest_value)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM