字典在Python中小写

我希望这样做,但对于一个字典:

"My string".lower() 

有一个内置函数,或者我应该使用循环?

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

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

生成器expression式 (以上使用)在构build字典中通常很有用; 我一直使用它们。 循环理解的所有expression性,没有任何内存开销。

以下内容与Rick Copeland的答案完全相同,只是没有使用生成器expression式而已:

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

发生器expression式,列表理解和(在Python 2.7和更高版本)dict理解的基本上是重写循环的方式。

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

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

因为你不需要初始化一个空的字典/列表/等,但是,如果你需要做的不仅仅是一个函数/方法的调用,它们可能会很快变得混乱。

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

如果提供的字典有多种types的键/值(数字,string等); 然后使用以下解决scheme。

例如; 如果你有一个名为mydict的字典,如下所示

 mydict = {"FName":"John","LName":"Doe",007:true} 

在Python 2.x中

 dict((k.lower() if isinstance(k, basestring) else k, v.lower() if isinstance(v, basestring) else v) for k,v in mydict.iteritems()) 

在Python 3.x中

 dict((k.lower() if isinstance(k, str) else k, v.lower() if isinstance(v, str) else v) for k,v in mydict.iteritems()) 

注意:这适用于单维词典

我正在回答这个问题,因为这个问题被标记为Python 。 因此,回答Python 2.xPython 3.x的解决scheme,并处理非string键的情况。

Python 2.x – 使用字典理解

 {k.lower() if isinstance(k, basestring) else k: v.lower() if isinstance(v, basestring) else v for k,v in yourDict.iteritems()} 

演示

 >>> yourDict = {"Domain":"WORKGROUP", "Name": "CA-LTP-JOHN", 111: 'OK', "Is_ADServer": 0, "Is_ConnectionBroker": 0, "Domain_Pingable": 0} >>> {k.lower() if isinstance(k, basestring) else k: v.lower() if isinstance(v, basestring) else v for k,v in yourDict.iteritems()} {'domain': 'workgroup', 'name': 'ca-ltp-john', 'is_adserver': 0, 'is_connectionbroker': 0, 111: 'ok', 'domain_pingable': 0} 

Python 3.x – 在Python 3.x中没有iteritems()

 {k.lower() if isinstance(k, str) else k: v.lower() if isinstance(v, str) else v for k,v in yourDict.items()} 

演示

 >>> dict((k.lower() if isinstance(k, basestring) else k, v.lower() if isinstance(v, basestring) else v) for k,v in yourDict.iteritems()) Traceback (most recent call last): File "python", line 1, in <module> AttributeError: 'dict' object has no attribute 'iteritems' >>> {k.lower() if isinstance(k, str) else k: v.lower() if isinstance(v, str) else v for k,v in yourDict.items()} >>> {'domain': 'workgroup', 'name': 'ca-ltp-john', 111: 'ok', 'is_adserver': 0, 'is_connectionbroker': 0, 'domain_pingable': 0} 

如果你想嵌套字典(json格式)的键和值小写,这可能会有所帮助。 需要对dict的理解支持Python 2.7中应该有的东西

  def _lowercase(obj): """ Make dictionary lowercase """ if isinstance(obj, dict): return {k.lower():_lowercase(v) for k, v in obj.iteritems()} elif isinstance(obj, list): return [_lowercase(k) for k in obj] elif isinstance(obj, basestring): return obj.lower() else: return obj 

爱你可以使用多级函数的方式,这是我的方法来小写键

 def to_lower(dictionary): def try_iterate(k): return lower_by_level(k) if isinstance(k, dict) else k def try_lower(k): return k.lower() if isinstance(k, str) else k def lower_by_level(data): return dict((try_lower(k), try_iterate(v)) for k, v in data.items()) return lower_by_level(dictionary) 
 def convert_to_lower_case(data): if type(data) is dict: for k, v in data.iteritems(): if type(v) is str: data[k] = v.lower() elif type(v) is list: data[k] = [x.lower() for x in v] elif type(v) is dict: data[k] = convert_to_lower_case(v) return data