簡體   English   中英

Python setdefault不是左值,有任何解決方法嗎?

[英]Python setdefault not lvalue, any work-arounds?

我有以下小程序:

ages=[23,23,43,54,34,22,43,23]

histogram={}
for age in ages:
    if not age in histogram:
        histogram[age]=1
    else:
        histogram[age]+=1

for age,count in sorted(histogram.items()):
    print "Age: %d Number of people: %d"%(age,count)

它創建一個簡單的列表中人的年齡直方圖。 但是,我發現直方圖哈希中的雙重查找非常難看。 我知道散列訪問基本上是O(1),所以它的效率沒有看起來的那么低,但是仍然...

我已經嘗試了多種解決方法,例如嘗試使用setdefault,但是以下方法無法實現:

histogram.setdefault("age",0)+=1 #<- Incorrect

我知道我可以使用defaultdict,但是它會更改創建的直方圖dict對象的行為,這不是我想要的。

如果我有辦法將這個問題設置為“低優先級”,我會這樣做,因為顯然這不是很重要。 但是,很長一段時間以來,我一直在尋找一種巧妙和/或優雅的解決方案。

因此,問題是:如何通過字典中的鍵增加整數,或者如果不存在則將其設置為1?

對於此特定應用程序,應使用Counter

from collections import Counter

ages = [23,23,43,54,34,22,43,23]

histogram = Counter(ages)

for age,count in sorted(histogram.items()):
    print "Age: %d Number of people: %d"%(age,count)

如果確實需要dict ,則可以使用dict構造函數將Counter轉換回dict

histogram = dict(Counter(args))

這就是collections.Counter進行計數的方式 ,適合您的示例。

histogram_get = histogram.get
for age in ages:
    histogram[age] = histogram_get(age, 0) + 1
histogram.setdefault("age", [0])[0] += 1

您可以預先初始化字典,即

histogram = dict(((a, 0) for a in set(ages)))

暫無
暫無

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

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