Dictionary to lowercase in Python Dictionary to lowercase in Python python python

Dictionary to lowercase in Python


You will need to use either a loop or a list/generator comprehension. If you want to lowercase all the keys and values, you can do this::

dict((k.lower(), v.lower()) for k,v in {'My Key':'My Value'}.iteritems())

If you want to lowercase just the keys, you can do this::

dict((k.lower(), v) for k,v in {'My Key':'My Value'}.iteritems())

Generator expressions (used above) are often useful in building dictionaries; I use them all the time. All the expressivity of a loop comprehension with none of the memory overhead.


The following is identical to Rick Copeland's answer, just written without a using generator expression:

outdict = {}for k, v in {'My Key': 'My Value'}.iteritems():    outdict[k.lower()] = v.lower()

Generator-expressions, list comprehension's and (in Python 2.7 and higher) dict comprehension's are basically ways of rewriting loops.

In Python 2.7+, you can use a dictionary comprehension (it's a single line of code, but you can reformat them to make it more readable):

{k.lower():v.lower()    for k, v in    {'My Key': 'My Value'}.items()}

They are quite often tidier than the loop equivalent, as you don't have to initialise an empty dict/list/etc.. but, if you need to do anything more than a single function/method call they can quickly become messy.


If you want keys and values of multi-nested dictionary (json format) lowercase, this might help.Need to have support for dict comprehensions what should be in 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 -- also supports 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