我想知道是否有更多pythonic的方式來聲明一個可選值列表?Python - 可選列表值 - 更pythonic的方式?
title = data.get('title')
label = data.get('label') or None
if label:
parent = [title, label]
else:
parent = [title]
在此先感謝。
我想知道是否有更多pythonic的方式來聲明一個可選值列表?Python - 可選列表值 - 更pythonic的方式?
title = data.get('title')
label = data.get('label') or None
if label:
parent = [title, label]
else:
parent = [title]
在此先感謝。
這將在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]
,在兩個版本中起作用的列表理解。
每個片段都會過濾掉錯誤的值,只剩下那些實際包含數據的片段。
對於Py2與Py3的差異+1,並顯示列表理解等價物在兩者中起作用,並解釋它的作用。 – abarnert 2013-02-16 01:20:01
接受這個是因爲Python2〜Python3差異的解釋。謝謝! – user937284 2013-02-16 13:24:29
你甚至可以合併到所有這些一行:
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]
你可以只篩選出錯誤的價值觀 - '父母= [我爲我在父母如果我]'。 – 2013-02-16 00:27:32
不,因爲你可能不應該首先使用列表 – 2013-02-16 00:27:50
你真的想'data.get('label')or None'嗎?這會將'0','[]','False'等轉換爲'None'。由於後面的代碼將任何虛假標籤都視爲相同,因此沒有理由將它們全部轉換爲「無」。 – abarnert 2013-02-16 00:39:00