2012-12-20 54 views
3

在迭代字典時使用第一塊代碼而不是第二塊代碼有什麼好處?.items()和.keys()之間的區別

for k, v in mydict.items(): 
    if v == None: 
     mydict[k] = '' 

for k in mydict.keys(): 
    if mydict[k] == None: 
     mydict[k] = '' 
+8

在任何情況下,請注意'if ... is None:'is recommended。 – delnan

+2

作爲一個註釋,單詞*代碼*在這裏沒有意義(*代碼*尤其聽起來很奇怪),更好的措詞可能是*哪一段代碼更好?*。代碼本身就是複數 - 很像水。談論許多* waters *或* water *是沒有意義的,而我們指的是*水體*或許多* body *。 (不要試圖成爲這裏的所有語法納粹,只是我看到了很多,所以我想我會提供一些建議)。 –

回答

9

第一種方法可以說是更清晰,更易於閱讀,所以我總是推薦它優於後者。

這就是說,在一個簡單的情況下,這樣的,更好的選擇是一個dictionary comprehension

{k: v if v is not None else "" for k, v in mydict.items()} 

值得一張紙條,上面第二個例子可以簡化,如迭代直接在mydict將提供鑰匙,所以不需要mydict.keys()(這主要用於當你想爲另一個目的而不是迭代的密鑰集合)。 (由於jathanism在評論中指出,在舊版本的Python(2.x)中,使用iteritems()items()更好,因爲它不會生成列表 - 像我這樣的3.x用戶並不需要因爲items()產生一個懶惰的字典視圖。)

+1

我唯一的建議是以這種方式迭代字典時使用'.iteritems()'。 – jathanism

+1

@jathanism只有在2.x。 – delnan

+0

好點,這些天我總是會忘記2.x怪癖。添加。 –

相關問題