为wxPython格式化dict.items()

为wxPython格式化dict.items(),python,dictionary,wxpython,Python,Dictionary,Wxpython,我在wxPython中有一个文本框,它获取dictionary.items()的输出,并在项目添加到字典时将其显示给用户。然而,原始数据非常难看,看起来像 [(u'BC',45) (u'CHM',25) (u'CPM',30)] 我知道dictionary.items()是一个元组列表,但我似乎不知道如何制作一个与wxPython的SetValue()方法兼容的好格式 我试着遍历列表和元组。如果我使用print语句,输出就可以了。但是当我用SetValue()替换print语句时,它似乎只获取

我在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(),但它挂起在元组中的两个值上。它将双重打印每个字符串并将整数相加,或者只返回整数,具体取决于我如何格式化它。

模块可能会有帮助:

>>> import pprint
>>> pprint.pformat({ "my key": "my value"})
"{'my key': 'my value'}"
>>> 
使用%格式(在C中称为sprintf),例如:

格式字符串中%转换规范的数量应与元组长度相匹配,在dict.items()的情况下为2。string formatting运算符的结果是一个字符串,因此将其用作SetValue()的参数没有问题。要将整个dict转换为字符串,请执行以下操作:

'\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")

这种方法还可以按字母顺序对字典进行排序,这对识别已选择或使用的项目有很大帮助。

我不太清楚。是否尝试在文本字段中显示值?如果是这样的话,一个好的格式是什么样的呢?
self.textCtrl.SetValue(getNiceDictRepr(myDict))
for key, value in sorted(self.dict.items()):
    self.current_list.WriteText(key + " " + str(self.dict[key]) + "\n")