反转映射时处理字典中的特殊字符/unicode和顺序

2024-04-19 04:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我要反转以下词典的键映射:

joy2gurbaniakhar = {'T':'a', 'n':'A', 'J':'e', ';':'s', 'j':'h', 'e':'k', 'y':'K', 'r':'g', 'x':'G', 'C':'|', 'u':'c', 'S':'c', 'i':'j', 'M':'J', 'R':'\\', 'N':'t', 'm':'T', 'v':'f', 'Y':'F', 'D':'x', 's':'q', 'E':'Q', 'd':'d', 'X':'D', 'B':'n', 'g':'p',  'c':'P', 'p':'b', 'G':'B', 'w':'m', ':':'X', 'o':'r', 'b':'l', 't':'v', 'V':'V', 'ô':'S', 'õ':'^', 'ö':'Z', '÷':'z', 'ø':'&', 'ÿ':'L', 'z':'M', 'k':'w', 'h':'I', 'f':'‍i', '/':'y', 'q':'R', 'H':'.', '[':'u', '{':'U', '\'':'o', '\"':'O', 'K':'W', 'F':'-','.':'[', 'A':'N', 'Z':'~', '?':'ੈ', '+':'Y', 'ý':'Å', 'ú':'E', 'J[':'ey', 'T{':'aU', 'T[':'au', 'Jh':'eI', 'fJ':'ie', 'nk':'Aw', 'n\"':'AO', 'n?':'AY', 'W':'hY', 'ù':'ƒ'}

我使用了以下代码来反转映射:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
reverse_maping = {v: k for k, v in joy2gurbaniakhar.items()}
print reverse_maping

它工作得很好,但我得到了以下映射,其中包含特殊字符的Unicode值和字典的不正确序列顺序,如下所示:

reverse_maping = {'V': 'V', '\xc3\x85': '\xc3\xbd', 'w': 'k', 'Y': '+', 'ey': 'J[', 'ie': 'fJ', 'eI': 'Jh', '&': '\xc3\xb8', '-': 'F', '.': 'H', 'aU': 'T{', 'b': 'p', 'A': 'n', '\xc6\x92': '\xc3\xb9', 'B': 'G', 'E': '\xc3\xba', 'D': 'X', 'G': 'x', 'F': 'Y', 'I': 'h', 'K': 'y', 'J': 'M', 'M': 'z', 'L': '\xc3\xbf', 'O': '"', 'N': 'A', '\xe0\xa9\x88': '?', 'P': 'c', 'S': '\xc3\xb4', 'R': 'q', '\xe2\x80\x8di': 'f', 'T': 'm', 'W': 'K', 'x': 'D', 'AY': 'n?', 'X': ':', '[': '.', 'Z': 'ö', 'U': '{', '\\': 'R', '^': '\xc3\xb5', 'a': 'T', 'Q': 'E', 'c': 'u', 'hY': 'W', 'e': 'J', 'd': 'd', 'g': 'r', 'f': 'v', 'AO': 'n"', 'h': 'j', 'k': 'e', 'j': 'i', 'm': 'w', 'l': 'b', 'o': "'", 'n': 'B', 'q': 's', 'p': 'g', 's': ';', 'r': 'o', 'u': '[', 't': 'N', 'Aw': 'nk', 'v': 't', 'y': '/', 'au': 'T[', 'z': '÷', '|': 'C', '~': 'Z'}

应该是这样的:

reverse_mapping = {'a':'T', 'A':'n', 'e':'J'.......}

Tags: iereverseaueiawaynkjh
1条回答
网友
1楼 · 发布于 2024-04-19 04:21:44

词典没有明确的顺序,所以不要期望有特定的顺序。如果希望以某种方式显示词典,请定义自己的显示函数:

#!python2
# -*- coding: utf-8 -*-
joy2gurbaniakhar = {'T':'a', 'n':'A', 'J':'e', ';':'s', 'j':'h', 'e':'k', 'y':'K', 'r':'g', 'x':'G', 'C':'|', 'u':'c', 'S':'c', 'i':'j', 'M':'J', 'R':'\\', 'N':'t', 'm':'T', 'v':'f', 'Y':'F', 'D':'x', 's':'q', 'E':'Q', 'd':'d', 'X':'D', 'B':'n', 'g':'p',  'c':'P', 'p':'b', 'G':'B', 'w':'m', ':':'X', 'o':'r', 'b':'l', 't':'v', 'V':'V', 'ô':'S', 'õ':'^', 'ö':'Z', '÷':'z', 'ø':'&', 'ÿ':'L', 'z':'M', 'k':'w', 'h':'I', 'f':'‍i', '/':'y', 'q':'R', 'H':'.', '[':'u', '{':'U', '\'':'o', '\"':'O', 'K':'W', 'F':'-','.':'[', 'A':'N', 'Z':'~', '?':'ੈ', '+':'Y', 'ý':'Å', 'ú':'E', 'J[':'ey', 'T{':'aU', 'T[':'au', 'Jh':'eI', 'fJ':'ie', 'nk':'Aw', 'n\"':'AO', 'n?':'AY', 'W':'hY', 'ù':'ƒ'}
reverse_mapping = {v: k for k, v in joy2gurbaniakhar.iteritems()}

def prettystr(D):
    return '{'+', '.join("'{}': '{}'".format(k,v) for k,v in sorted(D.iteritems()))+'}'

print prettystr(reverse_mapping)

输出:

{'&': 'ø', '-': 'F', '.': 'H', 'A': 'n', 'AO': 'n"', 'AY': 'n?', 'Aw': 'nk', 'B': 'G', 'D': 'X', 'E': 'ú', 'F': 'Y', 'G': 'x', 'I': 'h', 'J': 'M', 'K': 'y', 'L': 'ÿ', 'M': 'z', 'N': 'A', 'O': '"', 'P': 'c', 'Q': 'E', 'R': 'q', 'S': 'ô', 'T': 'm', 'U': '{', 'V': 'V', 'W': 'K', 'X': ':', 'Y': '+', 'Z': 'ö', '[': '.', '\': 'R', '^': 'õ', 'a': 'T', 'aU': 'T{', 'au': 'T[', 'b': 'p', 'c': 'u', 'd': 'd', 'e': 'J', 'eI': 'Jh', 'ey': 'J[', 'f': 'v', 'g': 'r', 'h': 'j', 'hY': 'W', 'ie': 'fJ', 'j': 'i', 'k': 'e', 'l': 'b', 'm': 'w', 'n': 'B', 'o': ''', 'p': 'g', 'q': 's', 'r': 'o', 's': ';', 't': 'N', 'u': '[', 'v': 't', 'w': 'k', 'x': 'D', 'y': '/', 'z': '÷', '|': 'C', '~': 'Z', 'Å': 'ý', 'ƒ': 'ù', 'ੈ': '?', '‍i': 'f'}

注意,这只会在UTF-8终端上正确打印,因为它处理原始的UTF-8字节字符串。应该使用Unicode字符串u'xxx'作为键和值。你知道吗

相关问题 更多 >