2014-12-03 8 views
0

Я пытаюсь изучить язык Python, и я попытался работать над проектом с кем-то, чтобы лучше понять его.Использование карты, чтобы вернуть что-то конкретное

Теперь следующий фрагмент кода был написан моим партнером, но когда я загружаю проект в PyCharm, он подчеркивает красный код и вывод также не показывает, что он должен делать.

Так что у меня этот кусок кода:

class account_fiscal_position(osv.osv): 
_name = 'account.fiscal.position' 
_inherit = 'account.fiscal.position' 

MAP_BTW_REGIME_KLANT_TOPACCOUNT = [(1, 'L3'), 
            (2, 'C'), 
            (3, 'I'), 
            (4, 'E')] 

def map_for_topaccount_customer_export(self, id, context=None): 
    return "L3" if not id else MAP_BTW_REGIME_KLANT_TOPACCOUNT[id] 

Он должен вернуться L3, если нет каких-либо ID, чтобы показать, следующий фрагмент подчеркнут красным цветом, и, кажется, не работает в моя консоль:

MAP_BTW_REGIME_KLANT_TOPACCOUNT [ID]

Любая идея, почему? Большое спасибо и извините за вопрос noobish

+0

Не должны 'MAP_BTW_REGIME_KLANT_TOPACCOUNT 'быть' dict', а не 'list' двух-tuple' s? Примечание: если он * был * словарем, ваша функция становится намного проще 'return MAP_BTW_REGIME_KLANT_TOPACCOUNT.get (id," L3 ")'. – jonrsharpe

ответ

2

То, что вы там определили MAP_BTW_REGIME_KLANT_TOPACCOUNT - это список пар, а не «карта».

Вы можете сделать его dict, поставив dict() вокруг него:

MAP_BTW_REGIME_KLANT_TOPACCOUNT = dict([(1, 'L3'), (2, 'C'), (3, 'I'), (4, 'E')]) 

Или (как @jonrsharpe отметил) это можно сделать более простым путем определения словаря непосредственно:

MAP_BTW_REGIME_KLANT_TOPACCOUNT = {1: 'L3', 2: 'C', 3: 'I', 4: 'E'} 
+2

Это много скобок, соответствующий словарь-литерал будет намного опрятным. – jonrsharpe

1

MAP_BTW_REGIME_KLANT_TOPACCOUNT - это не карта, это список ассоциаций. Для того, чтобы превратить его в карту, вы можете определить его как

MAP_BTW_REGIME_KLANT_TOPACCOUNT = dict([ 
    (1, 'L3'), 
    (2, 'C'), 
    (3, 'I'), 
    (4, 'E') 
]) 

Но когда вы на него, вы могли бы так же хорошо, превратить его в карту непосредственно:

MAP_BTW_REGIME_KLANT_TOPACCOUNT = { 
    1: 'L3', 
    2: 'C', 
    3: 'I', 
    4: 'E' 
}