2016-01-16 3 views
1

У меня есть один вопрос о назначении одного значения словаря в другой словаре значение в питона, значение содержит некоторые китайские символыПрисвоить один значение словаря в другой словаре значение в питона

# -*- 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']? Как сделать print a be {'1': '大'}?

+0

Вы создали строку байтов UTF-8, что означает, что любой вывод 'repr() будет показан с использованием escape-последовательностей для байтов без ASCII. См. Дубликат, где это объясняется более подробно. Не распечатывайте целый словарь, распечатывайте отдельные строковые значения. –

+0

Я бы сказал, что было бы полезно объяснить, что 'print' [на самом деле] (http://stackoverflow.com/questions/1979234/what-does-python-print-function-actually-do) – Pynchia

ответ

1

Почему существует разница между a и ['1']?

Первый (a) - ваш персонаж, завернутый в словарь. Когда вы печатаете словарь, Python будет печатать необработанные байты символа (\xe5\xa4\xa7), который является его кодировкой UTF-8. Когда вы печатаете строку напрямую, используя print a[1], Python будет декодировать эти 3 байта в их соответствующий символ.

Как сделать ['1'] и b ['1'] be 大?

Они уже такие же. Просто сделайте

print a['1'] 
print b['1'] 

Добавьте следующий класс, чтобы сжать свой словарь, как вы ожидаете. Обратите внимание, что этот код предполагает, что все ваши строки находятся в формате UTF-8.

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: 大} 
+1

благодарю вас за ответ , могу ли я сделать 'print a' be' {'1': '大'} '? – zhengyu

+0

Несомненно, ознакомьтесь с обновленным ответом. –

+0

@zhengyu yes, переключиться на Python 3. На нем 'print (a)' производит '{'1': '大'}' – Pynchia

Смежные вопросы