私は、属性が辞書であることがあるリストであるクラスや、属性などを含むネストされたオブジェクトを扱っています。Pythonを理解することで、Pythonが非常に非現実的であると感じるものでのみ実行できるスライスを実行したいと思います。
私の最小限のコードは次のようになります。
class X(object):
def __init__(self):
self.a = []
x=X()
x.a.append({'key1':'v1'})
x.a.append({'key1':'v2'})
x.a.append({'key1':'v3'})
# this works as desired
x.a[0]['key1'] # 'v1'
ネストされたディクショナリのキーへのアクセスを実行したいのですが、そのディクショナリを含むリストのすべての要素に対してその呼び出しを行います。これを行うための標準的なPythonの方法は、リスト内包表記です。
[v['key1'] for v in x.a]
ただし、私の最小限の例では、実際のシナリオでのネストの全範囲を完全に伝えることはできません。a
クラスの属性リストにX
は、オブジェクトが含まれている可能性があります。その属性はオブジェクトであり、その属性は、反復中にキーを選択する辞書です。外側のリスト。
# I would like something like
useful_list = x.a[:]['key1'] # TypeError: list indices must be integers, not str
# or even better
cool_list = where(x.a[:]['key1'] == 'v2') # same TypeError
すべての興味深いキーを理解するリストを開始すると、すぐにすべてのPythonicに見えなくなります。これを行うための良い方法はありますか、それともリストと辞書キーの考えられるすべての組み合わせに対して「getter」メソッドをコーディングする必要がありますか?
更新:私はリストのオーバーロードについて読んでいます。どうやら、リストのインデックスとdictのキーに使用されるgetitemメソッドを台無しにすることができます。たぶん、リストメンバーを反復処理するカスタムクラスです。これは不自然に聞こえ始めています...