【问题标题】:Lowercase both keys and values in a Python DictionaryPython字典中的键和值都小写
【发布时间】:2017-05-28 16:34:22
【问题描述】:

我有一本字典,我想插入到 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

但我尝试将其从键修改为值并将它们背靠背放置,但它在第二个示例的列表中失败。遍历整个字典并将键小写作为值的最佳方法是什么?我的大部分搜索只是返回改变键的大小写。

【问题讨论】:

    标签: python-2.7 dictionary lowercase


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的帮助。
    【解决方案2】:

    一步完成:

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

    【讨论】:

    • 您的解决方案将在问题中提供的示例上失败。
    • 你是对的 Sanyash,我忘了先添加 str()。我现在都试过了,效果很好。
    猜你喜欢
    • 2022-07-01
    • 2021-04-08
    • 2017-01-04
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2022-11-27
    相关资源
    最近更新 更多