2016-01-17 9 views
5

Python’da yeniyim ve mümkün olduğunca öğrenmeye çalışıyorum. Seçmeli anahtar/değer çiftlerine dayalı bir listenin belirli sözlük öğelerini kaldırmak istediğim aptalca bir problemle karşılaştım.Python'daki sözlükler listesinden seçilen anahtarlara göre çift sözlük nasıl kaldırılır?

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

Ve istediğim çıkışı iki tuşları A ve C değerlere dayalı sözlükler çıkarılmasıdır: ex için, ben var öğeler görülmektedir olmadığını hatırlamak set kullanma

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

Görülen ilk (A, C) çiftini tutmak istediğiniz gibi görünüyor. Bu doğru mu? Siparişi korumanız gerekiyor mu? – DSM

+0

Evet @DSM Yalnızca son listemde benzersiz çift (A, C) anahtar/değer çiftine sahip sözlüklere ihtiyacım var. Hayır, sipariş önemli değil. –

+0

Evet, yalnızca aynı (A, C) çiftine sahip olan çok sayıda sözlükten sadece birini * istediğinizi açıkça belirtelim. Ama her zaman * ilk * olana sahip olmanız mı, yoksa {'A': 1, 'B': 9, 'C': 3, 'D': 10} 'eşit derecede iyi çalıştı mı? – DSM

cevap

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

Çözüm için teşekkürler @falsetru. Cazibe olarak çalıştı! :) –

+0

A, B, C, D = 'ABCD''nin amacı nedir? Bunu kullanmak istiyorum ama benim tariflerimin anahtarları özel dizelerdir, örn. 'SlotSentence'. –

İlgili konular