2015-05-10 5 views
1

Допустим, у меня есть Dict с ключами 1, 2, 3, 4 и значения представляют собой списки, например:Python получить значение из индекса списка

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

Я хочу создать функцию, которая берет только значение из первого индекс в списке каждого ключа и составляя их сумму. Есть ли возможность «фильтровать» только значение из этого индекса для каждого ключа?

+0

Пожалуйста, сообщите нам правильную строку 'd = ...', поэтому нам не нужно угадывать, что вы можете иметь в виду. Сейчас он просто полон ошибок. –

ответ

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() дает вам сумму.

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) 
+0

Да, это очень мило, как бы вы это сделали, но вы не можете просто удалить строку «myMones is» .... так что моя проблема в том, что у меня есть строка «myMoney is 335» в первом индексе списка, и я хочу только значение, чтобы выйти из этого индекса! – Bajro

+0

О, извините. Я немного вас не понял. В этом случае вы можете использовать сортировку строк, чтобы игнорировать первые 11 символов (myMoney) из каждого индекса. См. Мой отредактированный ответ выше :-) –

+0

oh wow приятно спасибо за вашу помощь !! мне очень помогли, я так надеюсь :) – Bajro

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

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

Вы можете rsplit первой строки один раз на пробел и получить второй элемент отливки в целое и сумму:

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

Лучше подход может иметь Dict из 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