如何将 python 中的字典应用于字符串而不是单个字母
How to apply a dict in python to a string as opposed to a single letter
我正在尝试输出用户输入的字符串的字母值,我创建了一个字典并且这个过程有效,但只有一个字母。
- 如果我尝试输入多个字母,它 returns 一个
KeyError: (string I entered)
- 如果我尝试创建一个字符串列表,使其变为
['e', 'x', 'a', 'm', 'p', 'l', 'e']
,我会得到一个 TypeError: unhashable type: 'list'
我无法使用 chr
和 ord
函数(我知道如何使用,但它们不适用于这种情况)并且我曾经尝试使用 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]
我正在尝试输出用户输入的字符串的字母值,我创建了一个字典并且这个过程有效,但只有一个字母。
- 如果我尝试输入多个字母,它 returns 一个
KeyError: (string I entered)
- 如果我尝试创建一个字符串列表,使其变为
['e', 'x', 'a', 'm', 'p', 'l', 'e']
,我会得到一个TypeError: unhashable type: 'list'
我无法使用 chr
和 ord
函数(我知道如何使用,但它们不适用于这种情况)并且我曾经尝试使用 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]