次のデータ構造があるとします。
out = {
'foo': { 'public':{}, 'private':{}, 'other':{} },
'bar': { 'public':{}, 'private':{}, 'other':{} }
}
部分構造の一部を切り取って、新しいを作成しようとしていますdict
。これの私の使用法は、マークされたものを除くすべてのデータでリクエストに応答することprivate
です。
反対のことをするのは簡単です:
response = {x,y['private'] for x,y in out.iteritems()}
これは、それぞれのdictを構成し、 。とマークされたデータのみfoo
を含みます。しかし、標準ライブラリ(おそらくitertools)には、次のような機能がいくつかあります。bar
private
out = {
'foo': { 'public':{}, 'other':{} },
'bar': { 'public':{}, 'other':{} }
}
私は以下を試しました:
{x:(y['public'], y['other']) for x,y in out.iteritems()}
タプルを使用せず、各サブ構造に明示的に名前を付けないことをお勧めします。これは、再利用可能またはスケーラブルではないためです。
def remove(name, obj):
return {x:y for x,y in obj.iteritems() if x is not name}
{x:remove('private',y) for x,y in out.iteritems()}
これはうまくいくようですが、もっと良い方法はありますか?何か案は?