u'AB'
- это просто текстовое представление соответствующей строки Unicode. Вот несколько методов, которые создают одинаковую строку Unicode:
L = [u'AB', u'\x41\x42', u'\u0041\u0042', unichr(65) + unichr(66)]
print u", ".join(L)
Выход
AB, AB, AB, AB
В нет памяти u''
. Это просто способ представлять объект unicode
в Python 2 (как вы бы записали строковый литерал Unicode в исходном коде Python ). По умолчанию print L
эквивалентен print "[%s]" % ", ".join(map(repr, L))
, т.е. repr()
функция вызывается для каждого элемента списка:
print L
print "[%s]" % ", ".join(map(repr, L))
выход
[u'AB', u'AB', u'AB', u'AB']
[u'AB', u'AB', u'AB', u'AB']
Если вы работаете в REPL, тогда используется настраиваемый sys.displayhook
, который вызывает repr()
для каждого объекта по умолчанию:
>>> L = [u'AB', u'\x41\x42', u'\u0041\u0042', unichr(65) + unichr(66)]
>>> L
[u'AB', u'AB', u'AB', u'AB']
>>> ", ".join(L)
u'AB, AB, AB, AB'
>>> print ", ".join(L)
AB, AB, AB, AB
Не кодировать в байты. Печать Unicode напрямую .
В вашем конкретном случае я бы создал список Python и использовал бы json.dumps()
для его сериализации вместо использования форматирования строки для создания текста JSON:
#!/usr/bin/env python2
import json
# ...
test = [dict(email=player.email, gem=player.gem)
for player in players]
print test
print json.dumps(test)
выход
[{'email': u'test@gmail.com', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test1', 'gem': 0}]
[{"email": "test@gmail.com", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test1", "gem": 0}]