为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼如林 2021-03-19 18:14:33
我不确定我是否正确提出了这个问题,但我的意思是:可以说我有字典p = {'A' : 1, 'B' : 2, 'C' : 3}然后我有清单q = ['A', 'B']我如何求和q,以使结果为3?
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

使用内置函数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

如果在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.

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


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


查看完整回答
反对 回复 2021-03-29
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

函数编程和operator.itemgetter函数的一种方式:


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

>>> q = ['A', 'B']

>>> import operator

>>> sum(operator.itemgetter(*q)(p))

3


查看完整回答
反对 回复 2021-03-29
  • 3 回答
  • 0 关注
  • 238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信