5

json データから作成された大きな python dict があり、大きな dict から小さな dict を作成しています。大きなディクショナリの一部の要素には「詳細」と呼ばれるキーがあり、一部の要素にはありません。私がやりたいことは、大きな辞書の各エントリにキーが存在するかどうかを確認し、存在しない場合は、キー「詳細」を値「詳細なし」で新しい辞書に追加することです。デモとして、いくつかのサンプル コードを以下に示します。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']}

ただし、大きな dict エントリの 1 つに詳細がない場合、キー エラーが発生します。モジュールを使用する必要があると言っているのは正しいDefaultDictですか、それとももっと簡単な方法がありますか?

4

3 に答える 3

13

は必要ありませんcollections.defaultdictsetdefault辞書オブジェクトのメソッドを使用できます。

d = {}
bar = d.setdefault('foo','bar') #returns 'bar'
print bar # bar
print d  #{'foo': 'bar'}

他の人が指摘したように、辞書にキーを追加したくない場合は、getメソッドを使用できます。

これは、私がよく見ている古いリファレンスです。

于 2012-07-18T18:50:26.453 に答える
4

collections.defaultdictエントリをdict自動的に作成する場合に使用できます。ただし、そうではなく、「利用できません」(または何でも)したい場合は、dictasに割り当ててデフォルト値としてd[key] = v使用できますd.get(k, 'Not available')

于 2012-07-18T18:51:16.417 に答える
2

キーが欠落している場合、メソッドを使用しget(key, defaultVar)てデフォルト値を指定します。'details'

SmallDict = {d['name']:{'department':d['department'],'details':d.get('details','No details available')} for d in LargeDict['results']}
于 2012-07-18T18:52:19.313 に答える