Skip to main content
 首页 » 编程设计

Python之OrderedDict 中的字典理解不起作用

2025年05月04日97xing901022

我有这个代码:

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 对象的常规字典的 ordereddict,这些字典是通过理解建立的。我最初有嵌套的 dict 理解并且它工作正常但决定我需要订购顶级 dict 所以最终以这种方式结束。问题是现在我得到这个错误:

TypeError: 'type' object does not support item assignment 

关注有问题的代码片段。我不知道我做错了什么。 ordereddict 是否不允许理解,即使它不是顶级的?也许它试图在 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" 

请您参考如下方法:

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

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) 

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