Python 将字典的值转换为小写

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

我有一个python字典,里面有一个字典,一些值放在数组或列表中

我想把字典打印成全小写,而不改变任何其他内容,但我仅有的代码只遍历普通dict的值,它不处理数组或列表。关于如何解决这个问题有什么建议吗?以下是我目前掌握的代码:

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字母,如
    json.loads(json.dumps(dict.lower())
    ?@NickA如果您有
    Infinity
    NaN
    值,您可以
    加载这些字母(即使它不是标准的一部分,它是常见的,并且由Python支持),但不是
    无限
    nan
    。另外,我不记得Python是否支持
    \U
    (也是非标准但常见的),但如果它支持,调用
    lower
    也会破坏这一点。@abarnert-True!,但对于像在本例中这样的位置数据,它们更不可能出现,因此一条评论不是答案:)无论如何,值得学习如何做到这一点。@NickA Sure;我只是想指出一些注意事项。(我认为只有这三种情况存在,而且这三种情况都不标准但很常见,这意味着它可能是许多用例的最佳答案,只要您理解这一点。)