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

use*_*127 1 python dictionary list

我不确定我是否正确地提出了这个问题,但我的意思是:

可以说我有字典

p = {'A' : 1, 'B' : 2, 'C' : 3}
Run Code Online (Sandbox Code Playgroud)

然后我有名单

q = ['A', 'B']       
Run Code Online (Sandbox Code Playgroud)

如何求和q以使结果为3?

谢谢!

Ash*_*ary 6

使用内置函数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
Run Code Online (Sandbox Code Playgroud)

在任何情况下,在元素q中没有找到p,然后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.
Run Code Online (Sandbox Code Playgroud)

列表理解的版本大致等同于:

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
Run Code Online (Sandbox Code Playgroud)

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

summ = 0
for x in q:
    summ += p.get(x,0)
print summ
Run Code Online (Sandbox Code Playgroud)

  • @ user2444127不要在现有问题上移动球门柱.虽然你的新问题是相关的,但它仍然是一个新问题,属于一个单独的问题,你应该先尝试自己解决. (2认同)