Проблемы с dict + zip списка - потеря первых двух значений списка при конвертации? - PullRequest
2 голосов
/ 15 апреля 2020

Как testList обрабатывается иначе, чем myShortList ?! Обратите внимание, что выходные данные testList пропускают 2 значения 'testList', когда помещаются в dict! Пожалуйста, ПОМОГИТЕ!

>>> testList
['1', 'targets', '0', 'alive', '1', 'unreachable']
>>> myShortList
['254', 'targets', '12', 'alive', '242', 'unreachable']
>>> dict(zip(myShortList[::2], myShortList[1::2]))
{'254': 'targets', '12': 'alive', '242': 'unreachable'}
>>> dict(zip(testList[::2], testList[1::2]))
{'1': 'unreachable', '0': 'alive'}

Ответы [ 2 ]

1 голос
/ 15 апреля 2020
Словарь

A python должен иметь уникальные ключи. В testList вы назначаете ключу «1» значение «цели», а затем назначаете ключу «1» значение «недостижимый». Это перезаписывает ваше первоначальное значение «target» и оставляет вам только две записи.

Лучшим форматом было бы иметь слова [«target», «alive», «unreachable»] в качестве ключей, а затем они у каждого есть значение. Значения не обязательно должны быть уникальными, что также позволяет легко извлекать значения из словаря.

test_dict = dict(zip(testList[1::2], testList[::2]))
print(test_dict["targets"])  # Returns "1"
0 голосов
/ 15 апреля 2020

Поскольку в Python ключи dict должны иметь уникальные и неизменяемые ключи, в последнем примере вы пытались добавить ключи с таким же значением и, следовательно, перезаписали первый.

Распечатайте это:

print(list(zip(testList[::2], testList[1::2])))

Выход:

[('1', 'targets'), ('0', 'alive'), ('1', 'unreachable')]
...