python写字典_Python中的小写字典

Python中的小写字典

除了字典,我希望这样做:

"My string".lower()

有内置函数还是应该使用循环?

Teifion asked 2020-07-08T05:49:42Z

11个解决方案

78 votes

您将需要使用循环或列表/生成器理解。 如果要小写所有键和值,可以执行以下操作:

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

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

Rick Copeland answered 2020-07-08T05:50:36Z

14 votes

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

outdict = {}

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

outdict[k.lower()] = v.lower()

生成器表达式,列表推导和(在Python 2.7及更高版本中)字典推导基本上是重写循环的方法。

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

{k.lower():v.lower()

for k, v in

{'My Key': 'My Value'}.items()

}

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

dbr answered 2020-07-08T05:51:10Z

6 votes

如果您希望多嵌套字典(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'}

}

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

vldbnc answered 2020-07-08T05:51:39Z

4 votes

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

damio answered 2020-07-08T05:51:59Z

2 votes

如果提供的字典具有多种类型的键/值(数字,字符串等); 然后使用以下解决方案。

例如; 如果您有一个名为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())

注意:这对一维词典效果很好

Finny Abraham answered 2020-07-08T05:52:37Z

2 votes

在Python 3中:

d = dict()

d = {k.casefold(): v for k, v in d.items()}

Joe Heffer answered 2020-07-08T05:52:57Z

1 votes

我的回答很晚-问题被标记为iteritems()。因此,为Python 2.x和Python 3.x提供解决方案,并解决非字符串键的情况。

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中的Πυθωνξ.χ-νο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

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}

Nabeel Ahmed answered 2020-07-08T05:53:35Z

1 votes

在Python 2中,您可以执行以下操作:

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

在Python 2中,用.items()代替.iteritems():

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

vasista answered 2020-07-08T05:53:59Z

0 votes

喜欢您可以使用多层功能的方式,这是我小写键的方式

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)

Decebal answered 2020-07-08T05:54:19Z

0 votes

我先使用JSON库对字典进行反序列化,并应用小写,然后再转换回字典

import json

mydict = {'UPPERCASE': 'camelValue'}

print(mydict)

mydict_in_str = json.dumps(mydict)

mydict_lowercase = json.loads(mydict_in_str.lower())

print(mydict_lowercase)

zeb answered 2020-07-08T05:54:40Z

-1 votes

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

sree answered 2020-07-08T05:54:56Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值