2017-05-28 41 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

相關問題