2012-05-08 10 views
2

需要一些幫助,請與此錯誤:PYTHON '統一' 對象不支持項目assignement

類型錯誤: '統一' 對象不支持項目分配

利涅:menuDic [STR( menu.id)] [ 'menuDishes'] [STR(d.dish.dishType.name)] [ 'dishTypeName'] [STR(d.dish.id)] = {}

def getDishOfTheWeek(): 
    menuDic = Ddict(dict) 
    for menu in Menus.select().where(state = True): 
     menuDic[str(menu.id)]={} 
     menuDic[str(menu.id)]['menuId']=menu.id 
     menuDic[str(menu.id)]['menuName']=menu.name 
     menuDic[str(menu.id)]['menuCountry']=menu.country.name 
     menuDic[str(menu.id)]['menuDishes']={} 
     for d in DishMenuRels.select().where(menu = menu.id).join(Dishes).join(DishTypes).order_by('name') 
      menuDic[str(menu.id)]['menuDishes'][str(d.dish.dishType.name)] = {} 
      menuDic[str(menu.id)]['menuDishes'][str(d.dish.dishType.name)]['dishTypeName'] = d.dish.dishType.name 
      menuDic[str(menu.id)]['menuDishes'][str(d.dish.dishType.name)]['dishTypeName'][str(d.dish.id)] = {} 
      menuDic[str(menu.id)]['menuDishes'][str(d.dish.dishType.name)]['dishTypeName'][str(d.dish.id)]['dishId'] = d.dish.id 
      menuDic[str(menu.id)]['menuDishes'][str(d.dish.dishType.name)]['dishTypeName'][str(d.dish.id)]['dishState'] = d.dish.name 
      menuDic[str(menu.id)]['menuDishes'][str(d.dish.dishType.name)]['dishTypeName'][str(d.dish.id)]['dishType'] = d.dish.price 
      menuDic[str(menu.id)]['menuDishes'][str(d.dish.dishType.name)]['dishTypeName'][str(d.dish.id)]['dishName'] = d.dish.country.name 
    print json.dumps(menuDic, indent=5, sort_keys=True) 

由於

回答

7

在這裏,您將字典密鑰'dishTypeName'指定爲顯示爲unicode字符串的值d.dish.dishType.name

 menuDic[str(menu.id)]['menuDishes'][str(d.dish.dishType.name)]\ 
       ['dishTypeName'] = d.dish.dishType.name 

然後,您使用該值的項目分配;以下內容與d.dish.dishType.name[str(d.dish.id)] = {}相同。

 menuDic[str(menu.id)]['menuDishes'][str(d.dish.dishType.name)]\ 
       ['dishTypeName'][str(d.dish.id)] = {} 

不用說,這將導致一個錯誤,因爲d.dish.dishType.name是一個不可改變的字符串。

我可以補充說,將這些作業拆分成更小的作品,也許有一些功能可以更好嗎?這些長期的賦值語句 - 我相信你已經注意到了 - 很難解釋和調試。

相關問題