在Python中将字典转为小写
我想对一个字典做这个事情:
"My string".lower()
有没有现成的函数可以用,还是说我需要用循环来实现?
14 个回答
15
在Python 3中更简洁的方法: {k.lower(): v for k, v in my_dict.items()}
16
如果你想把多层嵌套字典(也就是json格式)的键和值都变成小写,这里有个方法可以帮你。需要注意的是,这个方法需要支持字典推导式,这在Python 2.7中是可以实现的。
dic = {'A':['XX', 'YY', 'ZZ'],
'B':(u'X', u'Y', u'Z'),
'C':{'D':10,
'E':('X', 'Y', 'Z'),
'F':{'X', 'Y', 'Z'}
},
'G':{'X', 'Y', 'Z'}
}
PYTHON2.7 -- 也支持OrderedDict(有序字典)
def _lowercase(obj):
""" Make dictionary lowercase """
if isinstance(obj, dict):
t = type(obj)()
for k, v in obj.items():
t[k.lower()] = _lowercase(v)
return t
elif isinstance(obj, (list, set, tuple)):
t = type(obj)
return t(_lowercase(o) for o in obj)
elif isinstance(obj, basestring):
return obj.lower()
else:
return obj
PYTHON 3.6
def _lowercase(obj):
""" Make dictionary lowercase """
if isinstance(obj, dict):
return {k.lower():_lowercase(v) for k, v in obj.items()}
elif isinstance(obj, (list, set, tuple)):
t = type(obj)
return t(_lowercase(o) for o in obj)
elif isinstance(obj, str):
return obj.lower()
else:
return obj
107
你需要使用循环或者列表/生成器推导式。如果你想把所有的键和值都变成小写,可以这样做:
dict((k.lower(), v.lower()) for k,v in {'My Key':'My Value'}.iteritems())
如果你只想把键变成小写,可以这样做:
dict((k.lower(), v) for k,v in {'My Key':'My Value'}.iteritems())
生成器表达式(上面用到的)在构建字典时非常有用;我经常使用它们。它们结合了循环推导式的所有优点,但不会占用太多内存。