リストに入れられたオブジェクトのすべてのプロパティに対してハッシュされたインデックス (辞書) を作成するリストを Python で作成する最良の方法を探しています。
>>> foo = IndexingList([{ 'id': 1, 'name': 'cat' }, { 'id': 2, 'name': 'dog' }])
>>> foo[0]
{'id': 1, 'name': 'cat'}
>>> foo.findall('id', 2)
[{'id': 2, 'name': 'dog'}]
>>> foo += {'id': 3, 'name': 'dog'}
>>> foo.findall('name', 'dog')
[{'id': 2, 'name': 'dog'}, {'id': 3, 'name': 'dog'}]
IndexingList のデータ構造は次のようになると思います。
{
'items': [
{ 'id': 1, 'name': 'cat' },
{ 'id': 2, 'name': 'dog' }
],
'indexes': {
'id': {
1: [{ 'id': 1, 'name': 'cat' }],
2: [{ 'id': 2, 'name': 'dog' }]
},
'name': {
'cat': [{ 'id': 1, 'name': 'cat' }],
'dog': [
{ 'id': 2, 'name': 'dog' },
{ 'id': 3, 'name': 'dog' }
]
}
}
}
「インデックス」ノード内のオブジェクトは、「アイテム」内の同じオブジェクトを参照します。
それ自体がオブジェクトであるプロパティ値は、 str(property) を使用して「インデックス」に固執するものを取得することにより、一意のインデックスキーを受け取ることができると思います。