我需要能够接受一个字符串(一个只有字母和空格的句子)并将其拆分成字典,其中每个术语要么带有标签“ spaces”(其中i =“”),要么带有“ integers(其中我=任何数字)。到目前为止,我已经做到了:
shiftInt = {}
message = "HELLO THERE SIR"
alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T", "U","V", "W", "X", "Y", "Z"]
for char in message:
if char == " ":
shiftInt["spaces"] = char
else:
shiftInt["integers"] = alphabet.index(char)
print(shiftInt)
我知道这在字典中仅给我2个项目,但为清楚起见,我希望为每个字符都分配一个条目,并分别分配给相同的标签(我对字典和python的了解通常不是很好,对不起)< / p>
我尝试使用列表而不是字符串来执行此操作,但后来在程序中尝试解决将列表重新分配给另一个列表的问题(我总是遇到错误 TypeError:列表索引)必须是整数或切片,而不是str )
真的很感谢您的帮助
答案 0 :(得分:0)
这似乎是盲制密码的开始-初学者编程任务。使用defaultdict将所有字符收集到一个列表中。使用查找字典而不是.index()
来获取属于每个字符的“数字”:
from collections import defaultdict
from string import ascii_uppercase
shiftInt = defaultdict(list)
message = "HELLO THERE SIR"
mapper ={c:i for i,c in enumerate(ascii_uppercase)}
for i,c in enumerate(message):
if c == " ":
shiftInt["spaces"].append(i) # this a ppends the POSITION of spaces
else:
shiftInt["integers"].append(mapper.get(c,c)) # this appends the CHARACTER-POS
# in alphabet starting with A=0 to Z = 25
# or the character if unknown and not mapped
print(mapper)
# convert to normal dict
shiftInt = dict(shiftInt)
print ( shiftInt )
输出:
# mapper
{'A': 0, 'C': 2, 'B': 1, 'E': 4, 'D': 3, 'G': 6, 'F': 5, 'I': 8, 'H': 7, 'K': 10, 'J': 9,
'M': 12, 'L': 11, 'O': 14, 'N': 13, 'Q': 16, 'P': 15, 'S': 18, 'R': 17, 'U': 20, 'T': 19,
'W': 22, 'V': 21, 'Y': 24, 'X': 23, 'Z': 25}
# shiftInt
{'integers': [7, 4, 11, 11, 14, 19, 7, 4, 17, 4, 18, 8, 17], 'spaces': [5, 11]}
shiftInt
具有不同的含义:键'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
的字符串integers
的索引和键spaces
的原始字符串的索引。
如果这将是一个盲制密码-查找相关帖子,例如:Python Caesar Cipher