Python从列表索引中获取值

时间:2015-05-10 11:12:44

标签: python list indexing

我们说我有一个带有1, 2, 3, 4键的词典,值是列表,例如:

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

我想创建一个函数,该函数只接受每个键列表中第一个索引的值并将它们相加。有没有可能"过滤"每个键只有该索引的值?

5 个答案:

答案 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()将字符串拆分为空格。我们接受了 最后一个条目,即数字,索引为-1float()将字符串转换为数字。 最后,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