2

重複の可能性:
辞書のリスト、あるキーの重複を排除、別のキーでソート

私の辞書オブジェクトのリストから重複を削除する方法を知っている人はいますか? リストに残すオブジェクトは、タイムスタンプが最新のものである必要があります。

私の質問からあいまいさを取り除くために、私の目標のための簡単なテストケースを提示します:

from datetime import datetime
now = datetime.now()
future = datetime(now.year + 100, *now.timetuple()[1:-2])

# Elements are considered equal if A and B matches.
data = [{"A":10,"B":20,"D":now}, \
        {"A":45,"B":20,"D":now}, \
        {"A":45,"B":20,"D":future}, \
        {"A":66,"B":6,"D":future}, \
        {"A":66,"B":6,"D":now}]

def make_unique(lst):
    pass

make_unique(data)

# data should now contain: (10,20,now),(45,20,future),(66,6,future)
print(data)

パフォーマンスはそれほど重要ではありませんが、リストには数千の要素が含まれている可能性があります。

4

1 に答える 1

1

ディクショナリを作成してuniqueを反復することができますdata。タプル(d['A'], d['B'])をキーに、対応するアイテムdを値にします。次に、(1)キーがすでに辞書にあるかどうか、および(2)対応するタイムスタンプが保存されているものよりも新しいかどうかを確認する必要があります。

unique = {}
for d in data:
    key = (d['A'],d['B'])
    if key in unique:
        if unique[key]['D'] < d['D']:
            unique[key] = d
    else:
        unique[key] = d

次に、ソートされていないリストを として取得しますunique.values()

于 2012-09-18T12:37:33.647 に答える