以下は辞書では機能しますが、OrderedDict では機能しません。od については、無限ループを形成しているようです。なぜか教えてくれますか?関数入力が dict の場合は dict を返す必要があり、入力が OrderedDict の場合は od を返す必要があります。
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