2017-05-28 2 views
1

私はmongodbに挿入したい辞書があります。コードは動作しますが、後で検索しやすくするために、両方のキーと値を小文字に移動して挿入したいと思います。いくつかの例のデータは次のようになります。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'} 

通知は2番目のオプションは、複数の著者を持っているので、辞書内のリスト。私はまだ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

私は再帰的に値を小文字に関数を定義して、dictの理解でそれを使用したい:かなり手伝っ

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

関連する問題