2016-01-17 12 views
5

私はPythonには新しく、可能な限り学びたいと思っています。私は選択的なキーと値のペアに基づいてリストの特定の辞書項目を削除したいというばかげた問題に悩まされています。Pythonで辞書のリストから選択したキーに基づいて重複辞書を削除するにはどうすればいいですか?

l = [{'A':1, 'B':2, 'C':3, 'D':4}, 
    {'A':5, 'B':6, 'C':7, 'D':8}, 
    {'A':1, 'B':9, 'C':3, 'D':10}] 

をそして私が欲しい出力は、2つのキーAC値に基づいて、辞書の除去である:EXについては、私が持っているアイテムを見ているかどうかを覚えておくことがsetを使用し

l = [{'A':1, 'B':2, 'C':3, 'D':4}, 
    {'A':5, 'B':6, 'C':7, 'D':8}] 
+0

最初の(A、C)のペアを維持したいようです。そうですか?あなたは注文を保存する必要がありますか? – DSM

+0

はい@DSM(A、C)のキー値のユニークなペアを持つ最終的なリストの辞書だけが必要です。いいえ、注文は重要ではありません。 –

+0

はい、同じ(A、C)のペアを持つ可能性がある辞書のうちの1つだけが必要なことは明らかです。しかし、あなたはいつも最初のものを持っている必要がありますか?{'A':1、 'B':9、 'C':3、 'D':10} ' – DSM

答えて

5

>>> A, B, C, D = 'ABCD' 
>>> 
>>> lst = [ 
...  {A:1, B:2, C:3, D:4}, 
...  {A:5, B:6, C:7, D:8}, 
...  {A:1, B:9, C:3, D:10} 
... ] 
>>> seen = set() 
>>> [x for x in lst if [(x[A], x[C]) not in seen, seen.add((x[A], x[C]))][0]] 
[{'A': 1, 'C': 3, 'B': 2, 'D': 4}, {'A': 5, 'C': 7, 'B': 6, 'D': 8}] 
+0

ソリューションのために@falsetruに感謝します。それは魅力として働いた! :) –

+0

'A、B、C、D = 'ABCD''の目的は何ですか?私はこれを使用したいが、私のdictのキーは特定の文字列である。 'slotSentence'です。 –

関連する問題