List vs Dict 并使用 Zip: list(zip) 工作正常,但 dict(zip) 有点偏离



使用 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"和其他人似乎很好....

你的字母表有 2 个 b:

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

因此,当您创建字典时,第二个映射将覆盖第一个映射。此外,您的字典将没有f键。另请注意,您缺少 2 克和j

相反,您可以使用string.ascii_lowercase

from string import ascii_lowercase
print(ascii_lowercase)
abcdefghijklmnopqrstuvwxyz

最新更新