如何确保Python字典的键为小写?
我有一个字典(dict),我想用simplejson把它转换成JSON格式。
我该怎么做才能确保字典里的所有键都是小写字母呢?
{
"DISTANCE": 17.059918745802999,
"name": "Foo Bar",
"Restaurant": {
"name": "Foo Bar",
"full_address": {
"country": "France",
"street": "Foo Bar",
"zip_code": "68190",
"city": "UNGERSHEIM"
},
"phone": "+33.389624300",
"longitude": "7.3064454",
"latitude": "47.8769091",
"id": "538"
},
"price": "",
"composition": "",
"profils": {},
"type_menu": "",
"ID": ""
},
补充说明:感谢大家关注我的问题,抱歉我没有详细解释我为什么想这样做。其实我是想修复django-piston
里的JSONEmitter
。
8 个回答
6
这是我的解决方案:
def lower_key(in_dict):
if type(in_dict) is dict:
out_dict = {}
for key, item in in_dict.items():
out_dict[key.lower()] = lower_key(item)
return out_dict
elif type(in_dict) is list:
return [lower_key(obj) for obj in in_dict]
else:
return in_dict
8
这里有一个解决方案,它禁止使用小写字母作为键:
class LowerCaseDict(dict):
def __setitem__(self, key, val):
if not key.islower():
raise TypeError, "%s key must be lowercase" % key
dict.__setitem__(self, key, val)
ld = LowerCaseDict()
ld['g']='g'
31
>>> d = {"your": "DATA", "FROM": "above"}
>>> dict((k.lower(), v) for k, v in d.iteritems())
{'from': 'above', 'your': 'DATA'}
>>> def lower_keys(x):
... if isinstance(x, list):
... return [lower_keys(v) for v in x]
... elif isinstance(x, dict):
... return dict((k.lower(), lower_keys(v)) for k, v in x.iteritems())
... else:
... return x
...
>>> lower_keys({"NESTED": {"ANSWER": 42}})
{'nested': {'answer': 42}}
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。