需要将字母转换为数字。因此,我使用字典来执行任务,但是现在,列表理解出现了问题。
文本既有大写字母又有小写字母,所以我创建了两个字典,一个字典用于大写字母,另一个用于大写字母。 现在,我想创建一个列表,该列表将基于文本中的值从这两个字典中理解。
x = 'abcdefghijklmnopqrstuvwxyz'
y = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
data = dict(zip(x, range(1,27)))
data1 = dict(zip(y, range(1,27)))
t = "Learning python."
q = [data[i] if i in data else data1[i] for i in t]
print(" ".join(map(str, q)))
预期结果:12 5 1 18 14 9 14 7 16 25 20 8 15 14
实际结果:
File "C:\Users\XXXXX\XXXXX.py", line 6, in <module>
q = [data[i] if i in data else data1[i] for i in t ]
File "C:\Users\XXXXX\XXXXX.py", line 6, in <listcomp>
q = [data[i] if i in data else data1[i] for i in t ]
KeyError: ' '
答案 0 :(得分:1)
正如已经提到的评论,您的翻译词典不包含空格' '
和点'.'
;因此您会遇到KeyError
。
这是另一种方式:
注意
ord('a') = 97
ord('z') = 122
您可以使用bytes
:
t = "Learning python."
res = [i - 96 for i in t.lower().encode() if 97 <= i <= 122]
print(res) # [12, 5, 1, 18, 14, 9, 14, 7, 16, 25, 20, 8, 15, 14]
我使用t.lower()
转换为所有小写字母,然后.encode()
转换为bytes
对象(其行为类似于整数序列),然后选择可打印的对象范围。
还请注意,如果您确实需要翻译字符串中的内容,建议您使用str.maketrans
和str.translate
:
table = str.maketrans('abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
t = "Learning python."
print(t.translate(table))
# LEARNING PYTHON.
答案 1 :(得分:0)
你可以做,
>>> x = 'abcdefghijklmnopqrstuvwxyz'
>>> y = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> data = dict(zip(x, range(1,27)))
>>> data1 = dict(zip(y, range(1,27)))
>>> t = "Learning python."
>>> [data.get(c, data1.get(c)) for c in t if data.get(c, data1.get(c))] # assuming you don't want the values that are not in the `dict`s
[12, 5, 1, 18, 14, 9, 14, 7, 16, 25, 20, 8, 15, 14]
答案 2 :(得分:0)
如果使用numpy,这将更加轻松
import numpy as np
x = 'abcdefghijklmnopqrstuvwxyz .'
# x = 'abcdefghijklmnopqrstuvwxyz' # still OK
np_x = np.array(list(x))
t = "Learning python."
np_t = np.array(list(t.lower()))
result = list(np.where(np_t.reshape(np_t.size, 1) == np_x)[1] + 1)
# [12, 5, 1, 18, 14, 9, 14, 7, 27, 16, 25, 20, 8, 15, 14, 28]
请注意,上述代码在x
或space
不包含dot
的情况下仍然有效
答案 3 :(得分:0)
更简单:
s = "Learning python."
alpha = "abcdefghijklmnopqrstuvwxyz"
print(*[str(alpha.index(i)+1) if i in alpha else "" for i in s.lower()])
输出:
12 5 1 18 14 9 14 7 16 25 20 8 15 14