Python 如何替换字典中所有出现的指定字符

Python 如何替换字典中所有出现的指定字符,python,encryption,Python,Encryption,我目前正在做一个加密解密程序。因此,我有一个原始字符串变量,然后使用字典将字符串转换为特殊字符串。现在,如果有人再次给我特殊的字符串,我该如何解密它?我正在尝试此代码,但它不起作用 enc_str= "`~```~`~`````" # this is 0315 dnory = {'0': '~', '1': '~`', '2': '~``', '3': '~```', '4': '~````', '5': '~`````', '6': '~``````', '7': '~```````', '8

我目前正在做一个加密解密程序。因此,我有一个原始字符串变量,然后使用字典将字符串转换为特殊字符串。现在,如果有人再次给我特殊的字符串,我该如何解密它?我正在尝试此代码,但它不起作用

enc_str= "`~```~`~`````" # this is 0315
dnory = {'0': '~', '1': '~`', '2': '~``', '3': '~```', '4': '~````', '5': '~`````', '6': '~``````', '7': '~```````', '8': '~````````', '9': '~`````````'}

def decrypt(dnory,enc_str):
    dec_list = []
    dnory_reverse = dict([[v,k] for k,v in dnory.items()])
    for key in dnory_reverse :
        if(enc_str.find(key)>0) :
            dec_list.append(dnory_reverse[key])
    print(dec_list)

decrypt(dnory,enc_str)

您的编码很难区分0和1。例如,您将如何代表3015

但是,对于1到9,以下代码就足够了:

print(''.join(str(len(i)) for i in enc_str.split('~')))
输出:

1315
0315
如果您将密钥更改为此:

dnory = {'0': '~', '1': '~`', '2': '~``', '3': '~```', '4': '~````', '5': '~`````', '6': '~``````', '7': '~```````', '8': '~````````', '9': '~`````````'}
…有一种方法可以让它像这样工作:

enc_str= "~```~`~`````"
print(''.join(str(len(i)) for i in enc_str.split('~')))
输出:

1315
0315

我想你不明白这个密码

对于dnory_reverse中的所有密钥(对于所有加密的数字),检查enc_str是否包含此密钥,并将相关的解密数字附加到dec_列表中

结论:你忘记了秩序

我认为你应该把dnory改为:

dnory = {'0': '~`', '1': '~``', '2': '~```', '3': '~````', '4': '~`````', '5': '~``````', '6': '~```````', '7': '~````````', '8': '~`````````', '9': '~``````````'}
并使用enc_str上的split(“~”)获取加密数字列表

我想我不必描述接下来的步骤,但请记住,在dnory中有“~”项,而在使用split()创建的列表中不存在

有用链接: - -

PS dict()不会按字母顺序对键进行排序,而是随机排序,因此代码会返回各种输出

# this is comment in Python
// not this

“不起作用”的确切含义是什么?你想在这里颠倒你的字典。你如何表示1315和3015?在你的原始逻辑中如何区分3015和415?我想你的意思是
0:'~'
?@Marcus.Aurelianus,是的,但是你如何区分它们?是的,不可能区分3015和415。@Marcus。不可能将任何数字与前一个数字后跟零或后面的数字2后跟两个零等区分开来@AshishAcharya所以现在我观察到的是,如果我将来完全使用另一种编码,我必须有一个分隔符来分隔字符串中的听写值。