【问题标题】:Formatting dict.items() for wxPython为 wxPython 格式化 dict.items()
【发布时间】:2010-09-19 06:24:49
【问题描述】:

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

【问题讨论】:

  • 我不太清楚。您是否尝试在文本字段中显示值?如果是这样,那么好的格式是什么样的?

标签: python dictionary wxpython


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    text_for_display = '\n'.join(item + u' ' + unicode(value) for item, value in my_dictionary.items())
    

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案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))
          

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

              猜你喜欢
              • 2011-03-04
              • 2021-06-01
              • 2019-06-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多