格式化wxPython的dict.items()

时间:2008-10-26 10:50:34

标签: python dictionary wxpython

我在wxPython中有一个文本框,它接受dictionary.items()的输出,并在项目添加到字典时将其显示给用户。但是,原始数据非常难看,看起来像

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

我知道dictionary.items()是一个元组列表,但我似乎无法弄清楚如何制作一个与wxPython的SetValue()方法兼容的漂亮格式。

我试过迭代列表和元组。如果我使用 print 语句,输出就可以了。但是当我用SetValue()替换 print 语句时,它似乎只获得每个元组的最后一个值,而不是元组中的两个项。

我也尝试过创建一个字符串并将该字符串传递给SetValue(),但是,我只能在元组中获取一个项目,而不是两个。

有什么建议吗?


编辑:是的,我将dictionary.items()的结果传递给wxPython应用程序中的文本字段。我没有像上面那样得到结果,而只是寻找类似的东西:

BC 45
CHM 25
CMP 30

没什么特别的,只需从每个元组中提取每个值并制作一个可视列表。

我尝试过创建一个字符串格式并将其传递给SetValue(),但它会挂起元组中的两个值。它将双重打印每个字符串并将整数添加到一起,或者它只返回整数,具体取决于我格式化它。

6 个答案:

答案 0 :(得分:4)

没有可以返回所需结果的内置字典方法。

然而,您可以通过创建将字典格式化的辅助函数来实现您的目标,例如:

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))

答案 1 :(得分:0)

也许pretty print模块会有所帮助:

>>> import pprint
>>> pprint.pformat({ "my key": "my value"})
"{'my key': 'my value'}"
>>> 

答案 2 :(得分:0)

text_for_display = '\n'.join(item + u' ' + unicode(value) for item, value in my_dictionary.items())

答案 3 :(得分:0)

使用%格式(在C中称为sprintf),例如:

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

格式字符串中的%转换规范的数量应与dup.items()情况下的元组长度匹配.2。字符串格式化运算符的结果是字符串,因此使用它作为SetValue()的参数是没问题的。要将整个dict翻译成字符串:

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

格式转换类型在doc

中指定

答案 4 :(得分:0)

这些数据似乎更好地显示为表/网格。

答案 5 :(得分:0)

我想出了一种格式化输出的“更好”的方法。像往常一样,当一个更优雅的方法可以做的时候,我试图将其核实。

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

这种方式也可以按字母顺序对字典进行排序,这在识别已经选择或使用过的项目时非常有用。