回答
您将需要使用循环或列表/发生器理解。如果你想小写的所有键和值,你可以,如果你想为小写只是按键为此::
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())
Generator expressions(以上使用)常常用于构建字典;我一直都在使用它们。循环理解的所有表达性,没有任何内存开销。
这假设钥匙是字符串。如果你有一个数字值作为一个键,它会失败。 – lorenzog 2015-07-10 10:32:01
`dict.iteritems()`从Python 3中移除,而不是使用`dict.items()`。 – 2016-08-02 15:31:26
以下是相同的里克·科普兰的答案,只是写没有使用生成器表达式:
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()
}
他们经常比循环整洁等价,因为你不必初始化一个空的字典/列表/等等。但是,如果你需要做的不只是一个函数/方法调用,他们可能很快变得混乱。
如果提供的字典有多种类型的键/值(数字,字符串等);然后使用以下解决方案。
例如;如果你有一个名为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())
注:这适用于单维词典
在Pythondef 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
较短方式:{k.lower(): v for k, v in my_dict.items()}
如果你想键和嵌套的字典(JSON格式)小写的值,这可能帮助。 需要支持字典理解应该在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
爱您可以使用多级功能的方式,这是我的小写-ING键
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)
我回答这个迟到的方式 - 因为这个问题被标记Python
。 因此,回答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.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}
- 1. 词典在Python
- 2. Python:词典中的词典?
- 3. 在Python中更新词典词典
- 4. python的词典
- 5. 词典 - Python的
- 6. Python倒词典
- 7. Python词典
- 8. 结合词典的两个词典(Python)
- 9. python词典的字典
- 10. Python词典| ZIP |字典(zip())
- 11. Python条件字典词典
- 12. Python中的字典词典!
- 13. 词典到Python的字典
- 14. 在Python词典中迭代
- 15. 更新词典在Python
- 16. 排序词典在Python
- 17. 在python中合并词典
- 18. 在Python中创建词典
- 19. 插入词典在Python
- 20. 元组到词典在Python
- 21. 在Python中访问字典词典
- 22. 词典在Python恒定按键字典
- 23. 在python词典中搜索字典
- 24. 缩写词典PYTHON
- 25. Python中的词典
- 26. 词典迭代Python
- 27. Python制作词典
- 28. 将数据转换成词典的词典在Python
- 29. 使用词典的词典在Python工作
- 30. Clojure词典词典
的键,值,或两者兼而有之? – hasen 2009-04-18 21:30:47
对于他们两个 – Teifion 2009-04-18 22:26:03