代码之家  ›  专栏  ›  技术社区  ›  crystalattice

格式化wxPython的dict.items()

  •  2
  • crystalattice  · 技术社区  · 17 年前

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

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

    我知道dictionary.items()是一个元组列表,但是我似乎不知道如何创建一个与wxPython的SetValue()方法兼容的格式。

    我试过遍历列表和元组。如果我使用 打印 语句,输出正常。但当我换掉 语句,它似乎只获取每个元组的最后一个值,而不是元组中的两个项。

    有什么建议吗?


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

    BC 45
    CHM 25
    CMP 30
    

    我试过创建一个字符串格式并将其传递给SetValue(),但它挂起在元组中的两个值上。它要么双重打印每个字符串并将整数相加,要么根据我的格式简单地返回整数。

    6 回复  |  直到 17 年前
        1
  •  4
  •   Dzinx    17 年前

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

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

    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))
    
        2
  •  0
  •   derfred    17 年前

    pretty print 模块将帮助:

    >>> import pprint
    >>> pprint.pformat({ "my key": "my value"})
    "{'my key': 'my value'}"
    >>> 
    
        3
  •  0
  •   Noam Noam    17 年前
    text_for_display = '\n'.join(item + u' ' + unicode(value) for item, value in my_dictionary.items())
    
        4
  •  0
  •   gimel    17 年前

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

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

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

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

    doc .

        5
  •  0
  •   Ali Afshar    17 年前

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

        6
  •  0
  •   crystalattice    17 年前

    我想出了一种更好的格式化输出的方法。像往常一样,我试着用核弹把它炸掉,这时一种更优雅的方法就可以了。

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

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