爲什麼你必須調用iteritems()
迭代字典中的鍵值對?即爲什麼在python中迭代字典時必須調用.iteritems()?
dic = {'one':'1', 'two':'2'}
for k, v in dic.iteritems():
print k, v
爲什麼不說迭代過字典
for k, v in dic:
print k, v
爲什麼你必須調用iteritems()
迭代字典中的鍵值對?即爲什麼在python中迭代字典時必須調用.iteritems()?
dic = {'one':'1', 'two':'2'}
for k, v in dic.iteritems():
print k, v
爲什麼不說迭代過字典
for k, v in dic:
print k, v
每蟒蛇容器C,期望是
for item in C:
assert item in C
將通過就好了 - 不會你找到它,如果驚人的in
一個感(循環子句)有一個完全不同的來自其他人的意思(存在檢查)?我當然會!這自然這樣工作的列表,集合,元組,...
所以,當C
是一本字典,如果in
是產生鍵/值元組在for
循環,然後通過最小驚訝的原則, in
也必須在收容檢查中使用它的左手操作數這樣的元組。
那會是多麼有用?好看不中用的確,基本上使if (key, value) in C
爲if C.get(key) == value
的代名詞 - 這是一張支票,我相信我可能已經執行,或要執行,100倍以上的很少超過if k in C
實際意味着什麼,檢查重點僅的存在並完全忽略了價值。
在另一方面,想循環剛上鍵是相當普遍,如:
for k in thedict:
thedict[k] += 1
具有價值,以及不會特別幫助:
for k, v in thedict.items():
thedict[k] = v + 1
居然少了幾分清晰不那麼簡潔。 (請注意,items
是用於獲取鍵/值對的「正確」方法的原始拼寫:不幸的是,這些訪問器返回整個列表的日子已經恢復,因此爲了支持「只重複」替代拼寫,必須引入了iteritems
,在Python 3中,與之前Python版本的向後兼容性約束大大減弱,它又變成了items
)。
我的猜測默認行爲:使用完整的元組會更直觀的循環,但也許沒有那麼測試會員使用in
。
if key in counts:
counts[key] += 1
else:
counts[key] = 1
,如果你要同時指定鍵和值in
該代碼將沒有真正的工作。我很難想象用例,你會檢查字典中的AND值是否都在字典中。僅測試按鍵就更自然了。
# When would you ever write a condition like this?
if (key, value) in dict:
現在是沒有必要的,in
運營商和for ... in
在相同的項目進行操作。在實施方面,它們是不同的操作(__contains__
與__iter__
)。但是,這種小小的不一致性會讓人感到困惑,而且不一致。
鑑於對於我可以想到的其他類型的內置迭代,只有在'for i in foo'中的'i'在某個點處假定'x'的值時,'x in foo' ,我會說這將是一個非常大的不一致。 – aaronasterling 2010-09-19 05:49:19
+1好問題。讓我們來看看亞歷克斯是怎麼說的 – NullUserException 2010-09-19 05:13:44