在Python中将字典转为小写

67 投票
14 回答
86973 浏览
提问于 2025-04-15 11:10

我想对一个字典做这个事情:

"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())

生成器表达式(上面用到的)在构建字典时非常有用;我经常使用它们。它们结合了循环推导式的所有优点,但不会占用太多内存。

撰写回答