3

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

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

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

我试过遍历列表和元组。如果我使用打印语句,则输出很好。但是当我用 SetValue() 替换print语句时,它似乎只得到每个元组的最后一个值,而不是元组中的两个项目。

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

有什么建议么?


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

BC 45
CHM 25
CMP 30

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

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

4

6 回答 6

5

没有内置的字典方法可以返回您想要的结果。

但是,您可以通过创建一个格式化字典的辅助函数来实现您的目标,例如:

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))
于 2008-10-26T18:59:14.830 回答
0

也许漂亮的打印模块会有所帮助:

>>> import pprint
>>> pprint.pformat({ "my key": "my value"})
"{'my key': 'my value'}"
>>> 
于 2008-10-26T11:02:06.323 回答
0

我想出了一种“更好”的格式化输出的方法。像往常一样,我试图用更优雅的方法将其消灭。

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

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

于 2008-11-18T03:57:39.453 回答
0
text_for_display = '\n'.join(item + u' ' + unicode(value) for item, value in my_dictionary.items())
于 2008-10-26T12:10:39.710 回答
0

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

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

格式字符串中的% 转换规范的数量应该匹配元组长度,在 dict.items() 的情况下,2. 字符串格式化操作符的结果是一个字符串,所以使用它作为 SetValue() 的参数是没有问题的. 要将整个 dict 转换为字符串:

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

格式转换类型在doc中指定。

于 2008-10-26T12:17:42.020 回答
0

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

于 2008-10-26T13:16:30.093 回答