私はjsonデータから作成した大きなpython dictを持っていて、大きなものから小さなdictを作成しています。大辞書のいくつかの要素には「詳細」というキーがあり、いくつかの要素にはありません。私がしたいことは、キーが大辞書の各エントリに存在するかどうかをチェックし、そうでない場合は、キー 'details'に 'No details available'という値を新しい辞書に追加します。私はいくつかのサンプルコードをデモのように置いています。 LargeDictはコード内の多くのキーではるかに大きくなりますが、わかりやすくするために単純にしています。辞書にキーが存在するかどうかを確認します。そうでない場合は、追加してください
LargeDict = {'results':
[{'name':'john','age':'23','datestart':'12/07/08','department':'Finance','details':'Good Employee'},
{'name':'barry','age':'26','datestart':'25/08/10','department':'HR','details':'Also does payroll'},
{'name':'sarah','age':'32','datestart':'13/05/05','department':'Sales','details':'Due for promotion'},
{'name':'lisa','age':'21','datestart':'02/05/12','department':'Finance'}]}
これは私がSmallDictためのデータを取得しています方法です:
SmallDict = {d['name']:{'department':d['department'],'details':d['details']} for d in LargeDict['results']}
大きな辞書エントリの1つは、何の詳細を持っていないとき、私はしかし、キーエラーが発生します。私はDefaultDict
モジュールを使用する必要があると言っているのでしょうか、それとも簡単な方法がありますか?
1 dict.setdefault(ドキュメントから)():「キーが辞書にある場合、ない場合は、その値を返すデフォルトの戻り値とキーを挿入します。デフォルト。既定の既定値は[なし]です。 – heltonbiker
はい。これを使って。 defaultdictは、不注意な人のための邪悪な生き物です。 – javadba
FWIW、 'defaultdict'は素晴らしいと思います。主に、別のソースから取得した場合、通常のdictを 'defaultdict'に変換する価値はないと思います。 'defaultdict'の「悪」は' default_factory'属性を 'None'に設定するだけで回避できます(これは通常のdictのように再び動作します)。 – mgilson