2016-03-23 32 views
0

Ben bir sözlükler listesi (a) var ve sözlükler boyunca belirli bir değer için arama yapmaya çalışıyorum ve sözlüğe bu değer varsa bu sözlüğü yeni bir sözlükler koleksiyonuna ekleyin. . Şimdiye kadar bensözlük iterate listesi ve python ekleme

newList = {} 

a = [{"one": "green", "two" : "blue", "three" : "red"}, 
    {"two": "blue", "four" : "green", "five" : "yellow"}, 
    {"two": "blue", "six": "white", "seven" : "black"}] 

for index in range(len(a)): 
if a[index][?] = ["blue"]: 
    newList.append(a[index]) 
+0

bir 'dict' türü' newList' – nluigi

cevap

1

Çabaladığını ne tamamen emin değilim, ama ben senin hedefe ulaşmak için mümkün olduğunca az sizin değiştirilmiş bir örnek:

ewList = [] 
a = [{"one": "green", "two": "blue", "three": "red"}, 
    {"two": "blue", "four" : "green", "five" : "yellow"}, 
    {"two": "yellow", "six": "white", "seven" : "black"}] 

for d in a: 
    if "yellow" in d.values(): 
     ewList.append(d) 

print ewList 

Çıktı:

[{'four': 'green', 'five': 'yellow', 'two': 'blue'}, {'seven': 'black', 'six': 'white', 'two': 'yellow'}] 
+0

anahtar 'maviler' ise bu testler çağırmak için kafa karıştırıcı, gerekli davranışı bu? (Sanırım d 'blue' ise demek istediniz :) – Pedru

5

Sahip olduğunuz veri yapısı, bu kullanım durumu/sorgu için oldukça uygun değil. Eğer veri yapısını değiştiremiyorsanız, burada bir naif bir çözümdür: if "blue" in d.values() arama Eğer ideal in aramalarını gerçekleştirirken önlemek için çalışmalısınız budur O(n) olduğunu

newList = [d for d in a if "blue" in d.values()] 

Not söyledi.


bu durumda daha uygun bir veri yapısı takas iç sözlüklerde anahtarı ve değerleri olan bir olacaktır: Bu durumda

a = [{"green": "one", "blue": "two", "red": "three"}, 
    {"blue": "two":, "green": "four", "yellow": "five"}, 
    {"blue": "two", "white": "six", "black": "seven"}] 

, anahtarın ile sözlükleri içine bakmak hangi O(1) olacaktır:

newList = [d for d in a if "blue" in d]