0

辞書のリストとして値を持つ辞書で操作を実行する必要があります

my_dicts = \
       {"A": [
             { 'key1 a' : 'value1',
               'key2 a' : 'value2' 
             },

             { 'key1 a' : 'value3',  
               'key2 a' : 'value4' 
             }
            ],

        "B": [
             { 'key1 b' : 'value5',
               'key2 b' : 'value6' 
             },

             { 'key1 b' : 'value7',  
               'key2 b' : 'value8' 
             }
            ]
}

キーのサブストリングとして「key2」を含むすべての値に対して、どのように操作を実行できますか?つまり、value2、value4、value6、およびvalue8に対する操作です。「key2」は「key2a」、「key2b」の部分文字列です

4

1 に答える 1

4

ネストされたすべての辞書のすべてのキーをループする必要があります。

# generator expression over all values for keys that contain `key2`.
key2values = (v for lst in my_dicts.itervalues() 
                    for dct in lst
                        for k, v in dct.iteritems()
                            if 'key2' in k)

for value in key2values:
    # loops over `value2`, `value4`, `value6`, `value8` in an arbitrary order.

デモンストレーション:

>>> key2values = (v for lst in my_dicts.itervalues() 
...                     for dct in lst
...                         for k, v in dct.iteritems()
...                             if 'key2' in k)
>>> for value in key2values:
...     print value
... 
value2
value4
value6
value8

すべてをループしないようにする場合は、データ構造を再考するか、構造にインデックスを作成して維持する必要があります。

キーと値のペアを操作する必要がある場合は、より多くの情報が必要です。ループに「親」辞書を含めることができます。

key2values = (dct, k, v for lst in my_dicts.itervalues() 
                    for dct in lst
                        for k, v in dct.iteritems()
                            if 'key2' in k)

ジェネレーターをループするときに、その情報を解凍します。

for parent, key, value in key2values:
    # parent[key] is equal to value.
于 2013-03-03T13:30:10.597 に答える