Форматирование dict.items () для wxPython

У меня есть текстовое поле в wxPython, которое принимает вывод dictionary.items () и отображает его пользователю по мере добавления элементов в словарь. Однако необработанные данные очень уродливые, выглядят как

[(u'BC',45)
(u'CHM',25)
(u'CPM',30)]

Я знаю, что dictionary.items () - это список кортежей, но я не могу понять, как создать хороший формат, который также совместим с методом SetValue () wxPython.

Я пробовал перебирать список и кортежи. Если я использую оператор Распечатать, результат будет в порядке. Но когда я заменяю оператор Распечатать на SetValue (), кажется, что он получает только последнее значение каждого кортежа, а не оба элемента в кортеже.

Я также пробовал создать строку и передать эту строку в SetValue (), но, опять же, я могу получить только один элемент в кортеже или другой, а не оба.

Какие-либо предложения?


Редактировать: Да, я передаю результаты Dictionary.items () в текстовое поле в приложении wxPython. Вместо того, чтобы получать результаты, подобные приведенным выше, я просто ищу что-то вроде:

BC 45
CHM 25
CMP 30

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

Я попытался создать строковый формат и передать его в SetValue (), но он зависает от двух значений в кортеже. Он либо дважды напечатает каждую строку и сложит целые числа, либо просто вернет целое число, в зависимости от того, как я его форматирую.

я не совсем понимаю. Вы пытаетесь отобразить значения в текстовом поле? И если да, то как бы выглядело красивое форматирование?

derfred 26.10.2008 13:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
889
6

Ответы 6

Может, поможет модуль красивая печать:

>>> import pprint
>>> pprint.pformat({ "my key": "my value"})
"{'my key': 'my value'}"
>>> 
text_for_display = '\n'.join(item + u' ' + unicode(value) for item, value in my_dictionary.items())

используйте% форматирование (известное в C как sprintf), например:

"%10s - %d" % dict.items()[0]

Число % конверсии спецификации в строке формата должно соответствовать длине кортежа, в случае dict.items () - 2. Результатом оператора форматирования строки является строка, поэтому использовать ее в качестве аргумента для SetValue () не проблема. Чтобы перевести весь диктант в строку:

'\n'.join(("%10s - %d" % t) for t in dict.items())

Типы преобразования формата указаны в док.

Кажется, что эти данные намного лучше отображаются в виде таблицы / сетки.

Нет встроенного метода словаря, который вернул бы желаемый результат.

Однако вы можете достичь своей цели, создав вспомогательную функцию, которая будет форматировать словарь, например:

def getNiceDictRepr(aDict):
    return '\n'.join('%s %s' % t for t in aDict.iteritems())

Это даст вам точный желаемый результат:

>>> myDict = dict([(u'BC',45), (u'CHM',25), (u'CPM',30)])
>>> print getNiceDictRepr(myDict)
BC 45
CHM 25
CPM 30

Затем в коде вашего приложения вы можете использовать его, передав его в SetValue:

self.textCtrl.SetValue(getNiceDictRepr(myDict))

Я придумал «лучший» способ форматирования вывода. Как обычно, я пытался избавиться от него, когда подойдет более элегантный метод.

for key, value in sorted(self.dict.items()):
    self.current_list.WriteText(key + " " + str(self.dict[key]) + "\n")

Этот способ также сортирует словарь по алфавиту, что очень помогает при идентификации элементов, которые уже были выбраны или использованы.

Другие вопросы по теме