У меня есть текстовое поле в 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 (), но он зависает от двух значений в кортеже. Он либо дважды напечатает каждую строку и сложит целые числа, либо просто вернет целое число, в зависимости от того, как я его форматирую.






Может, поможет модуль красивая печать:
>>> 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")
Этот способ также сортирует словарь по алфавиту, что очень помогает при идентификации элементов, которые уже были выбраны или использованы.
я не совсем понимаю. Вы пытаетесь отобразить значения в текстовом поле? И если да, то как бы выглядело красивое форматирование?