Python 从列表的索引中获取值

Python get value from index of list

假设我有一个包含键 1, 2, 3, 4 的字典,值是列表,例如:

{1: ['myMoney is 335', 'jeff', 'Manchester'],
 2: ['myMoney is 420', 'jeff', 'Birmingham']}

我想创建一个函数,它只从每个键列表中的第一个索引中获取值并将它们相加。有没有可能 "filter" 每个键的索引中的值?

如果您只想获取每个键列表中的第一个值,您只需要执行如下操作:

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)
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
d = {1: ["myMoney is 335", "Jeff", "Manchester"], 2: ["myMoney is 420", "Jeff", "Birmingham"]}

sum(float(v[0][11:]) for v in d.values())

如果字符串'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() 在空格处拆分字符串。我们采取 最后一个条目,即编号,索引为 -1float() 将字符串转换为数字。 最后,sum() 给出总和。

您可以在空白处对第一个字符串进行 rsplit 一次,并将第二个元素强制转换为 int 和 sum:

print(sum(int(val[0].rsplit(None,1)[1]) for val in d.itervalues()))

一个更好的方法可能是拥有一个字典的字典并通过键访问你想要的项目:

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