我感到困惑與下面的代碼行:在蟒蛇怎麼做「的if-else和」在字典解析工作
data = {n.attributes['xid']: float(n.content) if n.content else np.nan for n in graph.by_tag('value') }
字典理解由if-else
和for
循環。任何人都可以解釋我的代碼如何工作?
我感到困惑與下面的代碼行:在蟒蛇怎麼做「的if-else和」在字典解析工作
data = {n.attributes['xid']: float(n.content) if n.content else np.nan for n in graph.by_tag('value') }
字典理解由if-else
和for
循環。任何人都可以解釋我的代碼如何工作?
翻譯是否有幫助?
data = {}
for n in graph.by_tag('value'):
if n.content:
data[n.attributes['xid']] = float(n.content)
else:
data[n.attributes['xid']] = np.nan
你很困惑... if ... else ...
conditional expression。它不是循環的一部分,它是爲每個鍵 - 值對生成值的表達式的一部分。
字典理解包含至少一個循環,可選更多循環和右側的if
過濾器,以及左側的兩個表達式。一個表達式產生一個密鑰,另一個產生一個值。這兩個表達式一起爲結果字典創建鍵值對:
{key_expression: value_expression for target in iterable}
條件表達式只是簡單地生成基於測試的值。無論是測試求值爲真和一個值被拾取,或者該值爲false,而另一個被拾取:
true_expression if test else false_expression
只有拾取表達式求值;如果test
結束爲假,則執行false_expression
並返回結果,true_expression
將被完全忽略。
因此,你在看字典理解是等價的:
data = {}
for n in graph.by_tag('value'):
key = n.attributes['xid']
value = float(n.content) if n.content else np.nan
data[key] = value
所以value
要麼設置爲float(n.content)
,或np.nan
,取決於n.content
值(truethy與否)。
感謝您的幫助,是否有任何教程列表和詞典comprehensions。請經常碰到這些組合。我更喜歡數據科學。 – MJP 2014-09-23 07:21:48
@ user3796494:Python教程[涵蓋列表解析](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions);一旦你有了列表理解,發生器表達式和設置和字典的理解也不例外。 – 2014-09-23 07:27:37
@MartijinPieters - 這兩個列表comphrenhensions之間有什麼區別: data = {n.attributes ['xid']:float(n.content)if n.content else np.nan for n in graph.by_tag('value' )} data = {n.attributes ['xid']:float(n.content)for n in graph.by_tag('value')if n.content else np.nan} – MJP 2014-10-03 08:23:01
非常明確的解釋。 – MJP 2014-09-23 07:35:09
日期理解日期= {n.attributes ['xid']:str(n.content)for date.by_tag('value')}。我可以縮寫詞典理解如下:日期= {} for date.by_tag('value'): dates [n.attributes ['xid']] = str(n.content) – MJP 2014-09-24 06:00:58
幾乎,但你需要使用不同的變量名稱(在第一行覆蓋'日期')。 – 2014-09-24 06:21:20