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

时间:2018-06-06 17:53:41

标签: python python-3.x list dictionary

使用python 3,我将莫尔斯代码列表分配给变量值:

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

我还有字符串格式的字母表,它被转换为列表并分配给键:

keys = list('abcdebghigklmnopqrstuvwxyz')

现在我使用zip()将两者结合在一起并将其分配给my_dict

my_dict =zip(keys,values)

如果我将my_dict转换为list:

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 :(得分:1)

你的字母表有2个b:

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

因此,在创建字典时,第二个映射将覆盖第一个字典。此外,您的字典将没有f密钥。另请注意,您有2 g并且j缺失。

相反,您可以使用string.ascii_lowercase

from string import ascii_lowercase

print(ascii_lowercase)

abcdefghijklmnopqrstuvwxyz