2

私は、一意の情報を抽出する際に少し難しい非正規化テーブルを使用しています。テーブルが正規化されている場合:

unique_data = list({d['value'] for d in mydata})

トリックを行うでしょう。

しかし、テーブルは正規化されていません。

リストに変換できる dict のセットを作成できますか? 次のようなもの(これによりエラーが発生します):

unique_data_with_id = list({{'id':d['id'], 'value':d['value']} for d in mydata})
4

3 に答える 3

5

辞書は可変であるため、セットに入れることはできません。これを回避する 1 つの方法namedtupleは、辞書の代わりに aを使用することです。

IdValueTuple = collections.namedtuple("IdValueTuple", "id value")
unique_data_with_id = list({IdValueTuple(d["id"], d["value"]) for d in mydata})
于 2013-09-26T17:52:24.790 に答える
0
{{'id':d['id'], 'value':d['value']} for d in mydata}

setのを作成しますdict。s は変更可能であるためdict、ハッシュ可能ではなく、セットにはハッシュ可能な要素が必要です。

tuple代わりに試してください:

{(d['id'], d['value']) for d in mydata}

Sven Marnach の a namedtuplehere の使用法が非常に気に入っていることに注意してください。

于 2013-09-26T17:53:19.540 に答える
0

さらに、他のコンテキストで役立つ場合があるため、 afrozensetを中間オブジェクトとして使用できます。

>>> pprint.pprint(mydata)
[{'id': 1, 'ignore': 92, 'value': 'a'},
 {'id': 2, 'ignore': 92, 'value': 'b'},
 {'id': 1, 'ignore': 92, 'value': 'a'}]
>>> keep_keys = "id", "value"
>>> [dict(s) for s in {frozenset((k, d[k]) for k in keep_keys) for d in mydata}]
[{'id': 1, 'value': 'a'}, {'id': 2, 'value': 'b'}]
于 2013-09-26T18:01:26.963 に答える