以下字典的作品,但不是OrderedDict。對於od來說,它似乎形成了一個無限循環。你能告訴我爲什麼嗎? 如果函數輸入是字典它必須返回字典,如果輸入是OrderedDict它必須返回od。更改鍵爲小寫字母或OrderedDict
def key_lower(d):
"""returns d for d or od for od with keys changed to lower case
"""
for k in d.iterkeys():
v = d.pop(k)
if (type(k) == str) and (not k.islower()):
k = k.lower()
d[k] = v
return d
我以爲是一旦我創建了它設置的發生器。謝謝你澄清這一點。 但我不想創建一個新的字典,我想保持相同類型的字典/ orderedDict沒有測試他們的類型,因此保持相同的字典。 在這種情況下,應該使用d.keys()而不是d.iterkeys()。 – 2013-05-02 17:10:33
但爲什麼它爲字典工作?生成器在添加時仍應繼續生成密鑰,並創建無限循環。 – 2013-05-02 17:25:02
在大小寫不變的情況下,在大寫和小寫之間切換可將鑰匙保持在相同的位置。所以,簡單地將'ONE'換成'one'作爲關鍵字將取代相同索引處的關鍵字。 OrderedDict將始終追加鍵/值。使用d.keys()工作的 – sberry 2013-05-02 17:33:06