Как назначить ключи и значения в словаре, используя циклы в Python? - PullRequest
0 голосов
/ 07 октября 2018

МОЙ КОД:

a = ['name1 2 3 4', 'name2 5 6 7']
dicto = {}
i = 0
while (i < 2):
    dicto[a[i][:(a[i].find(''))]] = a[i][a[i].find('') + 1:]
    i += 1
print(dicto)

ЖЕЛАЕМЫЙ ВЫХОД:

{'name1':'2 3 4','name2':'5,6,7'}

МОЙ ВЫХОД:

{'': 'ame2 5 6 7'}

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Если мы используем .split() в каждом подсписке a, мы получим

a = [['name1', '2', '3', '4'], ['name2', '5', '6', '7']]

Теперь мы можем решить использовать 0 индекс .split()name в качестве наших key и оставшийся срез [1:] в качестве наших значений.Для этого мы можем использовать традиционный цикл

dicta = {}
for i in a:
    dicta[i.split()[0]] = i.split()[1:]
# {'name1': ['2', '3', '4'], 'name2': ['5', '6', '7']}

Это можно сократить, используя словарное понимание

dicta = {i.split()[0]: i.split()[1:] for i in a}
0 голосов
/ 07 октября 2018

Вы можете использовать словарное понимание с распаковкой последовательности:

a = ['name1 2 3 4', 'name2 5 6 7']

res = {k: ' '.join(v) for k, *v in map(str.split, a)}

print(res)

{'name1': '2 3 4', 'name2': '5 6 7'}
0 голосов
/ 07 октября 2018

Вы можете использовать конструктор dict со следующим выражением генератора с str.split():

dict(s.split(maxsplit=1) for s in a)

Возвращает:

{'name1': '2 3 4', 'name2': '5 6 7'}
...