Python 字典中的键和值都小写

Lowercase both keys and values in a Python Dictionary

我有一本字典,我想插入 mongodb。该代码有效,但我想插入它,同时将键和值都移动为小写,以便于以后搜索。一些示例数据是:

{'Publisher': u'TSR', 'Language': u'en', 'Title': u'The Silent Blade', 'Authors': [u'R. A. Salvatore'], 'ISBN-13': u'9780786913886', 'Year': u'1998'}

{'Publisher': u'Houghton Mifflin Harcourt', 'Language': u'en', 'Title': u'A Field Guide To Mushrooms, North America', 'Authors': [u'Kent H. McKnight', u'Roger Tory Peterson', u'Vera B. McKnight'], 'ISBN-13': u'9780395910900', 'Year': u'1998'}

注意第二个选项有多个作者,因此在字典中有一个列表。我对 python 还是个新手,这让我睡了很多个晚上。似乎无法理解如何访问它们。我可以用这个

改变钥匙包的大小写
book_data = {k.lower(): v for k, v in book_data.items()} #keys
book_data = {v.lower(): k for k, v in book_data.items()} #values

但我已经尝试 mod 从键到值,然后将它们背靠背放置,但它在第二个示例的列表中失败了。遍历整个字典并将键小写为值的最佳方法是什么?我的大部分搜索只是 return 更改键的大小写。

我会定义一个函数来递归地小写一个值,然后在字典理解中使用它:

import types
def lowerValues(arg):
    # Handle iterables
    if hasattr(arg, "__iter__"):
        return [lowerValues(item) for item in arg]
    elif isinstance(arg, types.StringTypes):
        return arg.lower()
    else:
        return arg

book_data = {k.lower() : lowerValues(v) for k,v in book_data.items()}

一步搞定:

book_data = {k.lower(): str(v).lower() for k, v in dict.items()}