2016-01-17 23 views
5

Sono nuovo di Python e sto cercando di impararlo il più possibile. Sono bloccato da un problema sciocco in cui voglio rimuovere determinati elementi del dizionario di un elenco basato su coppie chiave-valore selettive. Per ex, ho:Come rimuovere il dizionario duplicato in base alle chiavi selezionate da un elenco di dizionari in 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}] 

E l'uscita che voglio è la rimozione dei dizionari sulla base di due chiavi A e C valori:

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

Sembra che si desideri mantenere la prima coppia (A, C) vista. È giusto? E hai bisogno di conservare l'ordine? – DSM

+0

Sì @DSM Ho bisogno solo di quei dizionari nella mia lista finale che hanno una coppia unica di valori-chiave (A, C). No, l'ordine non è importante. –

+0

Sì, è chiaro che si desidera solo * uno * dei possibili molti dizionari con la stessa coppia (A, C). Ma hai sempre bisogno di avere * il primo * o '{'A': 1, 'B': 9, 'C': 3, 'D': 10}' hanno funzionato altrettanto bene? – DSM

risposta

5

Uso set ricordare se gli articoli sono visti.

>>> 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

Grazie a @falsetru per la soluzione. Ha funzionato come fascino! :) –

+0

Qual è lo scopo di 'A, B, C, D = 'ABCD''? Voglio usare questo ma i tasti del mio dict sono stringhe specifiche per es. 'SlotSentence'. –