2014-09-23 53 views

回答

0

翻譯是否有幫助?

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 
+0

非常明確的解釋。 – MJP 2014-09-23 07:35:09

+0

日期理解日期= {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

+0

幾乎,但你需要使用不同的變量名稱(在第一行覆蓋'日期')。 – 2014-09-24 06:21:20

2

你很困惑... 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與否)。

+0

感謝您的幫助,是否有任何教程列表和詞典comprehensions。請經常碰到這些組合。我更喜歡數據科學。 – MJP 2014-09-23 07:21:48

+0

@ user3796494:Python教程[涵蓋列表解析](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions);一旦你有了列表理解,發生器表達式和設置和字典的理解也不例外。 – 2014-09-23 07:27:37

+0

@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