我们说我有一个带有1, 2, 3, 4
键的词典,值是列表,例如:
{1: ['myMoney is 335', 'jeff', 'Manchester'],
2: ['myMoney is 420', 'jeff', 'Birmingham']}
我想创建一个函数,该函数只接受每个键列表中第一个索引的值并将它们相加。有没有可能"过滤"每个键只有该索引的值?
答案 0 :(得分:3)
如果字符串'myMoney is '
稍后更改,则拆分更稳定:
d = {1: ['myMoney is 335', 'jeff', 'Manchester'],
2:['myMoney is 420', 'jeff', 'Birmingham']}
sum(float(value[0].split()[-1]) for value in d.values())
d.values()
为您提供所有值。这里不需要钥匙。
'myMoney is 335’.split()
将字符串拆分为空格。我们接受了
最后一个条目,即数字,索引为-1
。
float()
将字符串转换为数字。
最后,sum()
为您提供总和。
答案 1 :(得分:0)
如果您只想获得每个键列表中的第一个值,您只需要执行以下操作:
d[key][list_index]
所以函数看起来像:
d = {1: ["myMoney is 335", "Jeff", "Manchester"], 2: ["myMoney is 420", "Jeff", "Birmingham"]}
def firstValueSum(d):
sum = 0
for item in d:
sum += int(d[item][0][11:])
return sum
print firstValueSum(d)
答案 2 :(得分:0)
d = {1: ['myMoney is 335', 'jeff', 'Manchester'], 2:['myMoney is 420', 'jeff', 'Birmingham']}
def get_filtered(d):
if not d:
return {}
return {k: int(v[0][len("myMoney is "):])
for k,v in d.iteritems()}
assert get_filtered(d) == {1: 335, 2: 420}
summed_up = sum(get_filtered(d).itervalues())
assert summed_up == 755
答案 3 :(得分:0)
d = {1: ["myMoney is 335", "Jeff", "Manchester"], 2: ["myMoney is 420", "Jeff", "Birmingham"]}
sum(float(v[0][11:]) for v in d.values())
答案 4 :(得分:0)
您可以在空格上对第一个字符串进行一次rsplit,并将第二个元素转换为int并求和:
print(sum(int(val[0].rsplit(None,1)[1]) for val in d.itervalues()))
更好的方法可能是制作一个dicts的词典并通过键访问你想要的项目:
d = {1: {"myMoney":335, "name":"jeff","city":"Manchester"}, 2:{"myMoney":420, "name":"jeff", "city":"Birmingham"}}
print(sum(dct["myMoney"] for dct in d.itervalues()))
755