在字典python

时间:2018-11-25 15:58:29

标签: python python-3.x

我需要能够接受一个字符串(一个只有字母和空格的句子)并将其拆分成字典,其中每个术语要么带有标签“ 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

真的很感谢您的帮助

1 个答案:

答案 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