2

このエラーで助けが必要です:

TypeError : 'unicode' オブジェクトは項目の割り当てをサポートしていません

ライン : 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)

ありがとう

4

1 に答える 1

7

d.dish.dishType.nameここでは、Unicode 文字列のように見える値 をディクショナリ キー に割り当てます'dishTypeName'

        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は不変の文字列であるため、エラーになります。

これらの割り当てを、おそらくいくつかの関数を使用して、より小さな部分に分割した方がよいと付け加えてもよろしいですか? これらの長い割り当てステートメントは、お気付きだと思いますが、解釈とデバッグが非常に困難です。

于 2012-05-08T04:00:33.637 に答える