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



我想反转以下字典的键映射:

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', 'xc3x85': 'xc3xbd', 'w': 'k', 'Y': '+', 'ey': 'J[', 'ie': 'fJ', 'eI': 'Jh', '&': 'xc3xb8', '-': 'F', '.': 'H', 'aU': 'T{', 'b': 'p', 'A': 'n', 'xc6x92': 'xc3xb9', 'B': 'G', 'E': 'xc3xba', 'D': 'X', 'G': 'x', 'F': 'Y', 'I': 'h', 'K': 'y', 'J': 'M', 'M': 'z', 'L': 'xc3xbf', 'O': '"', 'N': 'A', 'xe0xa9x88': '?', 'P': 'c', 'S': 'xc3xb4', 'R': 'q', 'xe2x80x8di': 'f', 'T': 'm', 'W': 'K', 'x': 'D', 'AY': 'n?', 'X': ':', '[': '.', 'Z': 'ö', 'U': '{', '\': 'R', '^': 'xc3xb5', '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'.......}
字典

没有定义的顺序,所以不要指望特定的顺序。 如果需要,请以某种方式为字典定义自己的显示函数:

#!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'作为键和值。

最新更新