Список против Dict и использование Zip: list (zip) работает нормально, но dict (zip) немного не подходит - PullRequest
0 голосов
/ 06 июня 2018

Используя python 3, у меня есть список строк кода Морзе, присвоенных значениям переменных:

values = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

У меня также есть алфавит в формате строки, который преобразуется в список и назначается ключам:

keys = list('abcdebghigklmnopqrstuvwxyz')

теперь я использую zip (), чтобы объединить оба и назначить его my_dict

my_dict =zip(keys,values)

, если я преобразовываю my_dict в список:

my_dict = list (my_dict)

print (my_dict)

Я получаюэти выходные данные:

[('a', '.-'), **('b', '-...'),** ('c', '-.-.'), ('d', '-..'), ('e', '.'), ('b', '..-.'), ('g', '--.'), ('h', '....'), ('i', '..'), ('g', '.---'), ('k', '-.-'), ('l', '.-..'), ('m', '--'), ('n', '-.'), ('o', '---'), ('p', '.--.'), ('q', '--.-'), ('r', '.-.'), ('s', '...'), ('t', '-'), ('u', '..-'), ('v', '...-'), ('w', '.--'), ('x', '-..-'), ('y', '-.--'), ('z', '--..')]

То, что я ожидаю, каждый индекс является комбо из предыдущих двух списков.

Однако, когда я конвертирую my_dict в словарь и печатаю:

my_dict = dict(my_dict)

print (my_dict)

Я получаю этот вывод (извините, кажется, не могу опубликовать должным образом):

{'y': '-.--', 'c': '-.-.', 'o': '---', 'r': '.-.', 'a': '.-', 't': '-', 'g': '.---', 'v': '...-', 'z': '--..', 'e': '.', 'w': '.--', 'n': '-.', 'i': '..', 'l': '.-..', 'h': '....', 'q': '--.-', 'm': '--', 's': '...', 'p': '.--.', 'x': '-..-', 'k': '-.-', 'u': '..-', 'd': '-..', **'b': '..-.'**}

Мой вопрос ... Я знаю, что словарь неупорядочен.но почему значение 'b' отличается: первый вывод выводит это ('b', '-...'), что правильно, и я понимаю, что второй вывод выводит это 'b': '..-.'что не имеет смысла.

'a' 'c' 'd' и другие, кажется, в порядке ....

1 Ответ

0 голосов
/ 06 июня 2018

Ваш алфавит имеет 2 b:

keys = list('abcdebghigklmnopqrstuvwxyz')
              ^   ^
--------------|---|

Поэтому, когда вы создаете свой словарь, второе отображение будет перезаписывать первое.Кроме того, в вашем словаре не будет ключа f.Также обратите внимание, что у вас 2 г и j отсутствует.

Вместо этого вы можете использовать string.ascii_lowercase:

from string import ascii_lowercase

print(ascii_lowercase)

abcdefghijklmnopqrstuvwxyz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...