Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用字典对字符串进行解密_Python_Dictionary - Fatal编程技术网

在Python中使用字典对字符串进行解密

在Python中使用字典对字符串进行解密,python,dictionary,Python,Dictionary,我有一本字典,它的键是字母表中的字母,数字值和hashtags取决于数字,因此: class Solution: def freqAlphabets(self, s: str) -> str: code_dict = {"a" : "1", "b": "2", "c" : "3", "d" : "4&

我有一本字典,它的键是字母表中的字母,数字值和hashtags取决于数字,因此:

class Solution:
    def freqAlphabets(self, s: str) -> str:
        
        code_dict = {"a" : "1", "b": "2", "c" : "3", "d" : "4", "e" : "5", "f" : "6", "g" : "7", "h" : "8", "i" : "9", "j" : "10#", "k" : "11#", "l" : "12#", "m" : "13#", "n" : "14#", "o" : "15#", "p" : "16#", "q" : "17#", "r" : "18#", "s" : "19#", "t" : "20#", "u" : "21#", "v" : "22#", "w" : "23#", "x" : "24#", "y" : "25#", "z" : "26#"}
    
我想根据字典中的值将字符串解码为后续的工作/字母,例如:s=“10#11#12”将是“jkab”,s=“25#”将是“y”

我有下面的代码,但问题是,它将在字典中循环,而不是读取字符串并查找值。我遇到的问题是,在我的方法中,当遇到1时,它会将其计算为字符串中的某个值,而它应该是10,然后我会得到一个0错误,因为它不在字典中。我该如何实施这一点呢

    for key, value in code_dict.items():
        if value in s:
            print(code_dict[key])

如果您的
code\u dict
键是您实际想要查找的东西(编码字符),那么它将更有用。此外,您可以在循环中生成它,而不必全部键入,因为它遵循一个简单的模式

困难的部分是对输入字符串进行标记化,但您可以利用这样一个事实,即所有标记都是三个字符,以
#
单个字符结尾,这使得状态机非常简单

>>> def decode(msg: str) -> str:
...     code_dict = {
...         f'{n+1}{"#" if n > 8 else ""}': chr(ord('a') + n)
...         for n in range(26)
...     }
...     result = ""
...     while msg:
...         num_chars = 1 if len(msg) < 3 or msg[2] != "#" else 3
...         result += code_dict[msg[:num_chars]]
...         msg = msg[num_chars:]
...     return result
...
>>> decode("10#11#12")
'jkab'
>>> decode("25#")
'y'
def解码(消息:str)->str: ... 代码_dict={ …f'{n+1}{“#”if n>8 else”“}”:chr(ord('a')+n) …适用于范围(26)内的n ... } ... result=“” ... 而味精: ... 如果len(msg)<3或msg[2]!=“#”其他3个 ... 结果+=代码dict[msg[:num\u chars]] ... msg=msg[num_chars:] ... 返回结果 ... >>>解码(“10#11#12”) “jkab” >>>解码(“25#”) “是的”
我会在字符串上循环,唯一的问题是字符串可以是10,但如果有意义的话,它会在遍历每个字符时查找1、0和#的值。我尝试通过检查字符是否为#来使用索引,然后在字典中检查s[I-2]到s[I]的合并字符串,但这都不起作用。为什么字典中的某些字符会反过来呢<代码>16#“,”q“:”17#“,”r“:”18#“,”s“:”19#“,
与例如
”j“:”10#“,”k“:”11#“,
在#上拆分是有意义的,但如果我有字符串110#,它会在#上拆分,但这是否也意味着它不能像我们希望的那样拆分10#?@johncoman在#上拆分在最初的示例中,您将获得
['10'、'11'、'12']
您如何知道如何解码
12
@MarkMeyer我将OP的方案误读为其中
.
是分隔符的方案。在
#
上进行拆分仍然可以通过将最后两个字符作为一个标记进行拆分,并将每个组件中的其余字符作为单个标记进行拆分。只是为了澄清while循环是否一直持续到字符串不再存在?while msg表示它一直持续到字符串为“false”,在本例中表示为空。循环体通过将字符串重新指定为其自身的一个较小部分来逐步收缩字符串(
msg=msg[num\u chars::
表示“从字符串开头删除
num\u chars
字符”)。