在python中,将一个字典值分配给另一个字典值

在python中,将一个字典值分配给另一个字典值,python,dictionary,Python,Dictionary,我有一个关于在python中将一个字典值赋给另一个字典值的问题,该值包含一些汉字 # -*- coding: utf-8 -*- import string a = {} a['1'] = '大' # chinese character b = {} b['1'] = a['1'] print a['1'] print a print b 打印出来的是 大 {'1': '\xe5\xa4\xa7'} {'1': '\xe5\xa4\xa7'} 为什么a和a['1']之间存在差异?如何使打印

我有一个关于在python中将一个字典值赋给另一个字典值的问题,该值包含一些汉字

# -*- coding: utf-8 -*- 
import string
a = {}
a['1'] = '大' # chinese character
b = {}
b['1'] = a['1']
print a['1']
print a
print b
打印出来的是

大
{'1': '\xe5\xa4\xa7'}
{'1': '\xe5\xa4\xa7'}
为什么
a
a['1']
之间存在差异?如何使
打印
成为
{'1':'大'}

为什么a和a['1']之间存在差异

第一个(
a
)是包装在字典中的字符。当您打印字典时,Python将打印字符的原始字节(
\xe5\xa4\xa7
),这是UTF-8编码。当您直接使用
print a[1]
打印字符串时,Python将把这3个字节解码为各自的字符

如何使a['1']和b['1']成为大?

他们已经是一样的了,就这么做吧

print a['1']
print b['1']
添加以下类以按预期转储字典。请注意,此代码假定所有字符串都是UTF-8格式


谢谢你的回答,我能把
打印成
{'1':'大'}?当然,检查更新的答案。@zhengyu是的,切换到Python 3。在它上
print(a)
products
{'1':'大'}
您创建了一个UTF-8字节字符串,这意味着任何
repr()
输出都将使用非ASCII字节的转义序列显示。请参阅副本,其中有更详细的解释。不要打印整个字典,而是打印单个字符串值。我认为解释
打印的内容将非常有用
class MyPrettyPrinter(pprint.PrettyPrinter):
    def format(self, object, context, maxlevels, level):
        if isinstance(object, str):
            return (object.decode('utf8'), True, False)
        return pprint.PrettyPrinter.format(self, object, context, maxlevels, level)

MyPrettyPrinter().pprint(a)  # {1: 大}