2017-05-28 69 views
1

我有一本我想插入到mongodb中的字典。该代码的作品,但我想插入它与两个键AND值移动到小写,以方便以后搜索。一些示例数据如下:在Python字典中同时使用小写字母和数值

{'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 

但我试图从国防部键这值,只是把他们背靠背,但在第二个例子就行了失败。迭代整个字典并将键值作为值进行小写的最佳方法是什么?我的大部分搜索只是返回更改密钥的情况。

回答

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

感谢那些帮助了不少。 – scott

相关问题