如何将 python 中的字典应用于字符串而不是单个字母

How to apply a dict in python to a string as opposed to a single letter

我正在尝试输出用户输入的字符串的字母值,我创建了一个字典并且这个过程有效,但只有一个字母。

我无法使用 chrord 函数(我知道如何使用,但它们不适用于这种情况)并且我曾经尝试使用 map 函数已经把它变成了一个列表,但只得到了奇怪的结果。

我也试过将 list 变成 tuple,但会产生同样的错误。

这是我的代码:

import string
step = 1
values = dict()
for index, letter in enumerate(string.ascii_lowercase):
    values[letter] = index + 1
keyw=input("Enter your keyword for encryption")
keylist=list(keyw)
print(values[keylist])

没有列表的替代版本:

import string
step=1
values=dict()
for index, letter in enumerate(string.ascii_lowercase):
    values[letter] = index + 1
keyw=input("Enter your keyword for encryption")
print(values[keyw])

您需要遍历所有字母并单独映射每个字母:

mapped = [values[letter] for letter in keyw]
print(mapped)

这使用列表理解来构建整数列表:

>>> [values[letter] for letter in 'example']
[5, 24, 1, 13, 16, 12, 5]

map() 函数本质上会做同样的事情,但是 returns 一个 iterator;您需要遍历该对象才能看到结果:

>>> for result in map(values.get, 'example'):
...     print(result)
5
24
1
13
16
12
5

请注意,您可以在一行中构建 values 词典; enumerate() 接受第二个参数,即起始值(默认为 0);使用字典理解来反转值键元组会给你:

values = {letter: index for index, letter in enumerate(string.ascii_lowercase, 1)}

你当然可以使用 ord()

inp = input('enter stuff:')
# a list of the ord() value of alphabetic character
# made uppercase and subtracted 64 --> position in the alphabet
alpha_value = [ord(n.upper())-64 for n in inp if n.isalpha()]
print(alpha_value)

测试:

import string
print([ord(n.upper())-64 for n in string.ascii_lowercase if n.isalpha()])

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]

您可以编写简单的 for 循环来将字母表映射到整数。 试试这个。

print[(item, (values[item]))for item in keylist]