Как печатать фактические символы Юникода в python dict или list [duplicate]

ggplot автоматически расширяет оси, чтобы убедиться, что есть место для построения точек. Вы можете отключить это поведение с помощью аргумента expand

ggplot(sub1, aes(x=YR,y=Freq)) + 
  geom_bar(stat='identity') + 
  annotate("text",x=3,y=14.9,label="Population status",cex=10) +
  scale_y_continuous(expand = c(0, 0), limits = c(0, 15))
6
задан Parham 28 May 2013 в 19:43
поделиться

5 ответов

Когда вы печатаете строку, вы получаете вывод метода __str__ объекта - в этом случае строка без кавычек. Метод __str__ списка отличается, он создает строку, содержащую открытие и закрытие [], и строку, создаваемую методом __repr__ для каждого объекта, содержащегося внутри. То, что вы видите, - это разница между __str__ и __repr__.

Вместо этого вы можете создать свою собственную строку:

print '[' + ','.join("'" + str(x) + "'" for x in s) + ']'

Эта версия должна работать как с Unicode, так и с байтовые строки в Python 2:

print u'[' + u','.join(u"'" + unicode(x) + u"'" for x in s) + u']'
8
ответ дан Mark Ransom 20 August 2018 в 12:30
поделиться
  • 1
    Это не работает, если в списке есть подсписки. – int_ua 11 September 2014 в 20:14
  • 2
    @int_ua вы можете сделать рекурсивную функцию, которая правильно ее обрабатывает. Но это был не вопрос. – Mark Ransom 11 September 2014 в 22:09

Другое решение

s = ['äåö', 'äå']
encodedlist=', '.join(map(unicode, s))
print(u'[{}]'.format(encodedlist).encode('UTF-8'))

дает [äåö, äå]

0
ответ дан alemol 20 August 2018 в 12:30
поделиться

В Python 2.x по умолчанию используется то, что вы испытываете:

>>> s = ['äåö']
>>> s
['\xc3\xa4\xc3\xa5\xc3\xb6']

Однако в Python 3 он отображается правильно:

>>> s = ['äåö']
>>> s
['äåö']
3
ответ дан jathanism 20 August 2018 в 12:30
поделиться
  • 1
    Возможно ли, чтобы он правильно отображался в Python 2.7? – Parham 28 May 2013 в 19:45

Можно использовать этот класс оболочки:

#!/usr/bin/python
# -*- coding: utf-8 -*-

class ReprToStrString(str):
    def __repr__(self):
        return "'" + self.__str__() + "'"


class ReprToStr(object):
    def __init__(self, printable):
        if isinstance(printable, str):
            self._printable = ReprToStrString(printable)
        elif isinstance(printable, list):
            self._printable = list([ReprToStr(item) for item in printable])
        elif isinstance(printable, dict):
            self._printable = dict(
                [(ReprToStr(key), ReprToStr(value)) for (key, value) in printable.items()])
        else:
            self._printable = printable

    def __repr__(self):
        return self._printable.__repr__()


russian1 = ['Валенки', 'Матрёшка']
print russian1
# Output:
# ['\xd0\x92\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xba\xd0\xb8', '\xd0\x9c\xd0\xb0\xd1\x82\xd1\x80\xd1\x91\xd1\x88\xd0\xba\xd0\xb0']
print ReprToStr(russian1)
# Output:
# ['Валенки', 'Матрёшка']


russian2 = {'Валенки': 145, 'Матрёшка': 100500}
print russian2
# Output:
# {'\xd0\x92\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xba\xd0\xb8': 145, '\xd0\x9c\xd0\xb0\xd1\x82\xd1\x80\xd1\x91\xd1\x88\xd0\xba\xd0\xb0': 100500}
print ReprToStr(russian2)
# Output:
# {'Матрёшка': 100500, 'Валенки': 145}
0
ответ дан Roman Me 20 August 2018 в 12:30
поделиться

Это удовлетворительно?

>>> s = ['äåö', 'äå']
>>> print "\n".join(s)
äåö
äå
>>> print ", ".join(s)
äåö, äå


>>> s = [u'åäö']
>>> print ",".join(s)
åäö
6
ответ дан sberry 20 August 2018 в 12:30
поделиться
  • 1
    Есть ли такое обходное решение для строк unicode? Я обновил свой вопрос для этого случая строк в Юникоде. – Parham 28 May 2013 в 19:45
Другие вопросы по тегам:

Похожие вопросы: