Преобразование списка в словарь с Python - PullRequest
0 голосов
/ 24 мая 2019

Существует список значений:

list_inside = ["de:14612:1","de:14612:21","de:14612:17","de:14612:16"]

Почему вместо {'from': '1', 'to': '16'} я получаю это {'from': '16', 'to': '16'}.Что я делаю не так с моим кодом?

keys = ["from", "to"]

list_inside = ["de:14612:1","de:14612:21","de:14612:17","de:14612:16"]

for i in list_inside[::len(list_inside)-1]:
    result = dict((key, i.join(i.split(":", 2)[2::1])) for key in keys)

print(result)

Ответы [ 3 ]

1 голос
/ 24 мая 2019

Вы делаете result = несколько раз внутри цикла.

Очевидно, что здесь будет действовать только последняя итерация.

1 голос
/ 24 мая 2019

Этот код получает результат, который вы ожидаете. -1 сделал простой код.

keys = ["from", "to"]

list_inside = ["de:14612:1","de:14612:21","de:14612:17","de:14612:16"]

result = {}
result[keys[0]] = list_inside[0].split(':')[2]
result[keys[1]] = list_inside[-1].split(':')[2]

print (result)
1 голос
/ 24 мая 2019

Использование

keys = ["from", "to"]

list_inside = ["de:14612:1","de:14612:21","de:14612:17","de:14612:16"]
result = {}    #Declare empty dict
for key, v in zip(keys, list_inside[::len(list_inside)-1]):  
    result.update({key: v.split(":", 2)[-1])})  #Use dict.update to update the required values. 

print(result)

Вывод:

{'to': '16', 'from': '1'}

Ваш текущий подход переопределяет result переменную.

...