字典在Python中小写

Tei*_*ion 45 python

我希望这样做但是为了字典:

"My string".lower()
Run Code Online (Sandbox Code Playgroud)

有内置功能还是应该使用循环?

Ric*_*and 81

您将需要使用循环或列表/生成器理解.如果你想要小写所有的键和值,你可以这样做::

dict((k.lower(), v.lower()) for k,v in {'My Key':'My Value'}.iteritems())
Run Code Online (Sandbox Code Playgroud)

如果你想只小写键,你可以这样做::

dict((k.lower(), v) for k,v in {'My Key':'My Value'}.iteritems())
Run Code Online (Sandbox Code Playgroud)

生成器表达式(上面使用的)通常用于构建字典; 我一直都在使用它们.循环理解的所有表现力都没有内存开销.

  • `dict.iteritems()`从Python 3中删除,而不是使用`dict.items()`. (10认同)
  • 这假设键是字符串.如果您将数值作为键,则会失败. (2认同)

dbr*_*dbr 14

以下内容与Rick Copeland的答案相同,只是在没有使用生成器表达式的情况下编写:

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

生成器表达式,列表理解和(在Python 2.7及更高版本中)dict理解基本上是重写循环的方法.

在Python 2.7+中,您可以使用字典理解(它是一行代码,但您可以重新格式化它们以使其更具可读性):

{k.lower():v.lower()
    for k, v in
    {'My Key': 'My Value'}.items()
}
Run Code Online (Sandbox Code Playgroud)

它们通常比循环等效的更整洁,因为你不必初始化一个空的dict/list/etc ..但是,如果你需要做的不仅仅是单个函数/方法调用,它们很快就会变得混乱.


dam*_*mio 11

python 3中更短的方法: {k.lower(): v for k, v in my_dict.items()}


vld*_*bnc 6

如果您希望多嵌套字典(json格式)的键和值小写,这可能会有所帮助。需要支持dict理解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'}
      }
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


And*_*nek 5

这将小写你所有的字典键。即使您有嵌套的字典或列表。您可以执行类似的操作来应用其他转换。

def lowercase_keys(obj):
  if isinstance(obj, dict):
    obj = {key.lower(): value for key, value in obj.items()}
    for key, value in obj.items():         
      if isinstance(value, list):
        for idx, item in enumerate(value):
          value[idx] = lowercase_keys(item)
      obj[key] = lowercase_keys(value)
  return obj 
Run Code Online (Sandbox Code Playgroud)
json_str = {"FOO": "BAR", "BAR": 123, "EMB_LIST": [{"FOO": "bar", "Bar": 123}, {"FOO": "bar", "Bar": 123}], "EMB_DICT": {"FOO": "BAR", "BAR": 123, "EMB_LIST": [{"FOO": "bar", "Bar": 123}, {"FOO": "bar", "Bar": 123}]}}

lowercase_keys(json_str)


Out[0]: {'foo': 'BAR',
 'bar': 123,
 'emb_list': [{'foo': 'bar', 'bar': 123}, {'foo': 'bar', 'bar': 123}],
 'emb_dict': {'foo': 'BAR',
  'bar': 123,
  'emb_list': [{'foo': 'bar', 'bar': 123}, {'foo': 'bar', 'bar': 123}]}}
Run Code Online (Sandbox Code Playgroud)