0

У меня есть этот код:Python - словарь понимания внутри OrderedDict не работает

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} 

Он настраивает ordereddict регулярных словарей объектов wx.Image, которые установлены с пониманием. Первоначально у меня были вложенные диктовки, и это сработало нормально, но решил, что мне нужен диплом верхнего уровня, чтобы его заказывали, поэтому он оказался таким. Проблема в том, что теперь я получаю эту ошибку:

TypeError: 'type' object does not support item assignment 

обнуление на части кода, о котором идет речь. Я не могу понять, что я сделал неправильно. Неужели orderdict не позволяет понять, даже если это не верхний уровень? Может быть, он пытается упорядочить все дикты в пределах упорядоченного курса и не может, потому что понимание находится на нижнем уровне? Не уверен, может быть, это что-то смешное, что я не мог заметить из-за туннельного зрения.

PS: в случае, если вам нужно знать, что в глобалов я ссылку выше:

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

ответ

3

Вы должны вызова типа для создания экземпляра:

self.statusIcons = collections.OrderedDict() 

Вы опущена () есть.

Вы можете создать элементы OrderedDict в выражении генератора производства (key, value) кортежей здесь:

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) 

, но я не уверен, что читаемость улучшилась с этим подходом.

+0

Очень быстрый ответ, спасибо. И это сработало;) Теперь я чувствую себя глупо. Я думал о назначении его аргументами, но комментарии в источнике orderdict сказали, что не делать этого, я думаю, потому что порядок аргументов может быть запутан? Не уверен. Я попробую это и проведу, и убедитесь, что он остается в порядке. Благодарю. – linus72982

+0

Не позволяю мне принять ответ еще на 4 минуты. Тогда я получу – linus72982