2014-12-03 52 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如果沒有任何標識,以示對,下面是一塊紅色下劃線似乎並沒有工作在我的控制檯:

MAP_BTW_REGIME_KLANT_TOPACCOUNT [ID]

任何想法,爲什麼?非常感謝並且對於noobish問題感到抱歉

+0

不應該'MAP_BTW_REGIME_KLANT_TOPACCOUNT '是'dict',而不是'two-'tuple'的列表?注意:如果它*是一個字典,你的函數就變得簡單得多了,返回MAP_BTW_REGIME_KLANT_TOPACCOUNT.get(id,「L3」)'。 – jonrsharpe 2014-12-03 11:55:01

回答

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 2014-12-03 11:56:24

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' 
}