Python 将字典的值转换为小写
我有一个python字典,里面有一个字典,一些值放在数组或列表中 我想把字典打印成全小写,而不改变任何其他内容,但我仅有的代码只遍历普通dict的值,它不处理数组或列表。关于如何解决这个问题有什么建议吗?以下是我目前掌握的代码:Python 将字典的值转换为小写,python,Python,我有一个python字典,里面有一个字典,一些值放在数组或列表中 我想把字典打印成全小写,而不改变任何其他内容,但我仅有的代码只遍历普通dict的值,它不处理数组或列表。关于如何解决这个问题有什么建议吗?以下是我目前掌握的代码: new_data = {} for i in range (0, len(json_file)): try: data = json_file[i]['payload'] for key, value in data.iteri
new_data = {}
for i in range (0, len(json_file)):
try:
data = json_file[i]['payload']
for key, value in data.iteritems():
new_data[value.lower()] = value
print (new_data)
except:
continue
这是嵌套字典:
{
"payload": {
"existence_full": 1,
"geo_virtual": "[\"56.9459720|-2.1971226|20|within_50m|4\"]",
"latitude": "56.945972",
"locality": "Stonehaven",
"_records_touched": "{\"crawl\":8,\"lssi\":0,\"polygon_centroid\":0,\"geocoder\":0,\"user_submission\":0,\"tdc\":0,\"gov\":0}",
"address": "The Lodge, Dunottar",
"email": "dunnottarcastle@btconnect.com",
"existence_ml": 0.56942382176587,
"domain_aggregate": "",
"name": "Dunnottar Castle",
"search_tags": [
"Dunnottar Castle Aberdeenshire",
"Dunotter Castle"
],
"admin_region": "Scotland",
"existence": 1,
"category_labels": [
[
"Landmarks",
"Buildings and Structures"
]
],
"post_town": "Stonehaven",
"region": "Kincardineshire",
"review_count": "719",
"geocode_level": "within_50m",
"tel": "01569 762173",
"placerank": 65,
"longitude": "-2.197123",
"placerank_ml": 37.279160734645,
"fax": "01330 860325",
"category_ids_text_search": "",
"website": "http:\/\/www.dunnottarcastle.co.uk",
"status": "1",
"geocode_confidence": "20",
"postcode": "AB39 2TL",
"category_ids": [
108
],
"country": "gb",
"_geocode_quality": "4"
},
"uuid": "3867aaf3-12ab-434f-b12b-5d627b3359c3"
}
Nick A在评论中指出了一个有趣的快捷方式:dict看起来与JSON兼容。如果是这样的话,我们可以转换成JSON,将字符串小写,然后再转换回来吗?有许多稍有不同的JSON标准:、和RFC、、和。然后是JSON在实践中的实际使用方式。以及Python模块实现它的方式。但我将在这里总结:
lowered = json.loads(json.dumps(d, ensure_ascii=False).lower())
…只要:
- 您的值都是类型
,dict
,list
,str
,float
,int
和bool
NoneType
- 您的
值只有dict
键str
- 您的
和列表
值不是循环的(例如,dict
)lst=[];lst.append(lst)
- 您的
值永远不会包括float
或math.inf
math.nan
- 您正在使用最新的ish Python(3.6很好),或者永远不会有任何非BMP字母,如
?@NickA如果您有json.loads(json.dumps(dict.lower())
或Infinity
值,您可以NaN
加载这些字母(即使它不是标准的一部分,它是常见的,并且由Python支持),但不是
或无限
。另外,我不记得Python是否支持nan
(也是非标准但常见的),但如果它支持,调用\U
也会破坏这一点。@abarnert-True!,但对于像在本例中这样的位置数据,它们更不可能出现,因此一条评论不是答案:)无论如何,值得学习如何做到这一点。@NickA Sure;我只是想指出一些注意事项。(我认为只有这三种情况存在,而且这三种情况都不标准但很常见,这意味着它可能是许多用例的最佳答案,只要您理解这一点。)lower