2008-10-26 38 views
2

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

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

我知道dictionary.items()是一个元组列表,但我似乎无法弄清楚如何使一个很好的格式,也兼容使用wxPython的SetValue()方法。

我试着遍历列表和元组。如果我使用print语句,则输出很好。但是,当我用SetValue()取代打印语句时,它似乎只获取每个元组的最后一个值,而不是元组中的两个元素。我也尝试创建一个字符串,并将该字符串传递给SetValue(),但是,我只能在元组中获取一个项目或其他项目,而不是两个。

有什么建议吗?


编辑:是的,我经过dictionary.items()的结果中的文本字段一个wxPython应用程序。而不是结果像上面,我只是在寻找类似:

BC 45 
CHM 25 
CMP 30 

没什么特别的,只是简单地拉动从每个元组的每个值,使一个可视列表。

我已经试过制作一个字符串格式并将其传递给SetValue(),但它被挂在元组中的两个值上。它将重复打印每个字符串并将整数加在一起,或者它只是返回整数,这取决于我如何格式化它。

+0

我不太清楚。你是否试图在文本框中显示值?如果是这样会是一个不错的格式化样子? – derfred 2008-10-26 10:55:24

回答

0

也许pretty print模块将帮助:

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

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

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

%转换规范在格式化字符串应该与dict.items()情况下的元组长度匹配。2.字符串格式化操作符的结果是一个字符串,因此将其用作a对SetValue()的参数是没有问题的。整个字典转换为字符串:

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

格式转换类型在doc规定。

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

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

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

这样还排序按字母顺序排列的字典,这是一种用于识别已经选择或使用的物品时,一个很大的帮助。