2015-03-02 5 views
0

Я пытаюсь прочесть понимание словаря, которое берет список строк и создает словарь из этих элементов. В приведенном ниже коде содержатся ожидаемые и фактические результаты, а также понимание, которое я использую. Любая помощь будет оценена по достоинству.Проблема с пониманием словаря

s = ['Kennedy D MA -1 -1 1 1', 'Snowe R ME 1 1 1 1'] 

strlist = list(x.split() for x in s) 

print({ strlist[x][0]:[int(strlist[x][y])] for x in range(len(strlist)) for y in range(3, len(strlist[0])) }) 


''' 
    EXPECTED: {'Snowe': [1, 1, 1, 1], 'Kennedy': [-1, -1, 1, 1]} 

    ACTUAL: {'Snowe':[1] , 'Kennedy':[1]} 
''' 

ответ

3

Простейшее:

{s[0]:s[3:] for s in strlist} 

не баловаться с индексами ... -)

+0

Wow! Это работает, но я не совсем уверен, как это сделать. Можете ли вы объяснить синтаксис s [3:]? Это просто повторение с 3 до конца? – drunkenmonkey44

+0

Мне также нужны 1 и -1 как целочисленные значения int (s [3:]) не работает. Можно ли каким-либо образом преобразовать эти значения в целые числа, когда я добавлю их в список? – drunkenmonkey44

+1

@ drunkenmonkey44 уверен, используйте '[int (x) для x в s [3:]' вместо просто 's [3:]'! –

0

Я не хотел бы использовать Dict понимание в этом случае, вы создаете список из одного элемента [int(strlist[x][y])]. В Python3:

strings = ['Kennedy D MA -1 -1 1 1', 'Snowe R ME 1 1 1 1'] 

result = {} 
for line in strings: 
    name, __, __, *rest = line.split() 
    result[name] = list(rest) 
1

Пробовал это

dict((x.split()[0],x.split()[3:]) for x in s)

Что вы можете изменить в дальнейшем! :

{x[0]:x[3:] for x in [y.split() for y in s]}

Если вы не возражаете, имеющие проблемы читаемости вы можете иметь

{x[0]:[int(i) for i in x[3:]] for x in [y.split() for y in s]}

для преобразования чисел в int s

Смежные вопросы