【问题标题】:Python -- Dictionary comprehension inside an OrderedDict not workingPython——OrderedDict 中的字典理解不起作用
【发布时间】:2015-05-29 16:48:46
【问题描述】:

我有这个代码:

self.statusIcons = collections.OrderedDict
for index in guiConfig.STATUS_ICON_SETS:
     self.statusIcons[index] = {condition:\
           wx.Image(guiConfig.STATUS_ICON_STRING.format(index, condition),wx.BITMAP_TYPE_PNG).ConvertToBitmap() \
           for condition in guiConfig.STATUS_ICON_CONDITIONS}

它设置了 wx.Image 对象的常规字典的有序字典,这些字典是通过理解设置的。我最初有嵌套的 dict 理解,它工作得很好,但我决定需要对顶级 dict 进行排序,所以最终以这种方式结束。问题是现在我得到了这个错误:

TypeError: 'type' object does not support item assignment

关注有问题的代码。我无法弄清楚我做错了什么。即使它不是顶级的,ordereddict 是否也不允许理解?也许它试图对有序字典中的所有字典进行排序,但不能因为理解处于较低级别?不确定,也许这是因为隧道视觉我无法发现的荒谬。

PS:如果您需要知道我上面提到的全局变量中的内容:

STATUS_ICON_SETS = ("comp", "net", "serv", "audio", "sec", "ups", "zwave", "stats")
STATUS_ICON_CONDITIONS = ("on", "off")
STATUS_ICON_STRING = "images/{0}_{1}.png"

【问题讨论】:

    标签: python for-loop typeerror ordereddictionary dictionary-comprehension


    【解决方案1】:

    您需要调用类型来创建实例:

    self.statusIcons = collections.OrderedDict()
    

    你在那里省略了()

    您也可以在这里生成 (key, value) 元组的生成器表达式中创建 OrderedDict 元素:

    self.statusIcons = collections.OrderedDict(
        (index, {condition: wx.Image(
                     guiConfig.STATUS_ICON_STRING.format(index, condition),
                     wx.BITMAP_TYPE_PNG).ConvertToBitmap()
                 for condition in guiConfig.STATUS_ICON_CONDITIONS})
        for index in guiConfig.STATUS_ICON_SETS)
    

    但我不确定这种方法是否提高了可读性。

    【讨论】:

    • 非常快速的回答,谢谢。它奏效了;)现在我觉得很傻。我考虑过用参数分配它,但ordereddict源中的cmets说不要这样做,我猜是因为参数顺序可能会混淆?不确定。我会尝试并测试并确保它保持正常。谢谢。
    猜你喜欢
    • 2019-03-29
    • 2021-10-20
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2011-03-14
    • 2013-01-08
    相关资源
    最近更新 更多