2012-02-11 33 views
2

我有一個字典,我想說「如果有一個類別,然後得到類別圖標。如果沒有,返回''」。字典得到()方法得到一個subvalue

我做它的圖標添加到字符串:

'Icon: %s' % venue.get('category', '').get('icon', 'No Icon') 

顯然,如果沒有分類,get()拋出一個錯誤。這裏有一些其他錯誤的方法來做到這一點:

venue.get('category[icon]', '') 

venue.get('category', '')['icon'] 

希望這說明了我想要做的。有沒有辦法做到這一點,沒有一個if/else語句?

+1

爲什麼你不想使用if/else語句?它會增強代碼的可讀性,並且它會完全按照您的要求進行操作。 – 2012-02-11 20:49:48

回答

2

你可以把默認值的空字典:

'Icon: %s' % venue.get('category', {}).get('icon', 'No Icon') 

然而,這招致每次運行時一個空的字典創建的開銷。如果性能對你很重要,請嘗試:

'Icon: %s' % (venue['category'].get('icon', 'No Icon') if 'category' in venue else 'No Icon') 

還有許多其他可能的方法來處理這個,很可能甚至超過上述有效(以上使兩個查找爲'category'如果找到)。

+0

在第一個片段中,您可以使用'venue.setdefault('category',{})...'而不是'venue.get(...)'。然後,如果沒有與該類別相關的字典,則會在第一次訪問時創建一個新字典。這是[參考文檔](http://starship.python.net/~mwh/hacks/setdefault.html)。 – Seth 2012-02-11 20:15:14

+1

另外,只需在前一行中聲明一個空的字典,就可以解決額外的開銷問題。這樣你就可以反覆引用相同的字典。 – 2012-02-11 20:50:37

+2

那麼,如果你這樣做,那麼你會想要聲明一個全局*一次*例如'EMPTY_DICT = {}',否則你仍然會在前一行創建一個新的空字典。 – 2012-02-11 21:07:48