簡體   English   中英

如何對包含字典元素的列表求和

[英]How to sum a list that contains dictionary elements

我不確定我是否正確提出了這個問題,但我的意思是:

可以說我有字典

p = {'A' : 1, 'B' : 2, 'C' : 3}

然后我有清單

q = ['A', 'B']       

我如何求和q,結果是3?

謝謝!

使用內置函數sum和生成器表達式:

>>> p = {'A' : 1, 'B' : 2, 'C' : 3}
>>> q = ['A','B']
#using generator expression
>>> sum(p.get(x,0) for x in q)
3
#using list comprehension, not memory efficient
>>> sum( [p.get(x,0) for x in q] )
3

如果在p找不到q任何元素,則dict.get將返回默認值0 ,因此不會引發任何錯誤。

幫助dict.get

>>> print dict.get.__doc__
D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.

列表理解版本大致等效於:

sums = []
for x in q:                  #loop over each item in q            
    sums.append(p.get(x,0))  #fetch the value of item from p and append it to sums  
print sum(sums)              # sum the list sums

(p.get(x,0) for x in q)是一個生成器表達式 ,而不是在內存中生成整個列表,它一次返回一個值。

summ = 0
for x in q:
    summ += p.get(x,0)
print summ

你可以做

sum(p[k] for k in q)

p[k] for k in q表達式p[k] for k in q是一個生成器理解 -與列表理解類似,不同之處在於它不必構造整個列表(當您只需要總和時,它就更快,更節省內存)。

請注意,此代碼基本上是以下代碼的更簡潔版本:

total = 0
for k in q:
    total = total + p[k]

您可能會更清楚一點。

函數編程和operator.itemgetter函數的一種方式:

>>> p = {'A' : 1, 'B' : 2, 'C' : 3}
>>> q = ['A', 'B']
>>> import operator
>>> sum(operator.itemgetter(*q)(p))
3

另一種方法:取這樣的事實優勢viewkeysdictionary返回一個set式的對象。 對於大型列表,這提供了性能優勢。

sum(p[x] for x in p.viewkeys() & q)

暫無
暫無

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

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