2013-02-16 47 views
1

我想知道是否有更多pythonic的方式來聲明一個可選值列表?Python - 可選列表值 - 更pythonic的方式?

title = data.get('title') 
label = data.get('label') or None 

if label: 
    parent = [title, label] 
else: 
    parent = [title] 

在此先感謝。

+1

你可以只篩選出錯誤的價值觀 - '父母= [我爲我在父母如果我]'。 – 2013-02-16 00:27:32

+0

不,因爲你可能不應該首先使用列表 – 2013-02-16 00:27:50

+1

你真的想'data.get('label')or None'嗎?這會將'0','[]','False'等轉換爲'None'。由於後面的代碼將任何虛假標籤都視爲相同,因此沒有理由將它們全部轉換爲「無」。 – abarnert 2013-02-16 00:39:00

回答

1

這將在Python 2

title = data.get('title') 
label = data.get('label') 

parent = filter(None, [title, label]) 

使用list(filter(...))工作在Python 3,因爲它返回在Python 3 對象,而不是一個列表。

parent = [i for i in parent if i],在兩個版本中起作用的列表理解。

每個片段都會過濾掉錯誤的值,只剩下那些實際包含數據的片段。

+0

對於Py2與Py3的差異+1,並顯示列表理解等價物在兩者中起作用,並解釋它的作用。 – abarnert 2013-02-16 01:20:01

+0

接受這個是因爲Python2〜Python3差異的解釋。謝謝! – user937284 2013-02-16 13:24:29

1

你甚至可以合併到所有這些一行:

parent = [data[k] for k in ('title', 'label') if data.get(k)] 

或者,如果你只是想跳過缺失值,並不是所有的falsish值:

parent = [data[k] for k in ('title', 'label') if k in data] 
相關問題