d1
sözlüğünde ve l1
numaralı listeden bir ürün var.Python sözlükte anlama çok yavaş
Sözlük anahtarları dizelerdir ve değerler, kendim tanımladığım Nesnelerdir. Eğer yardımcı olursa, Nesneyi daha ayrıntılı olarak tanımlayabilirim ancak şimdilik, nesnelerin bir names
liste özniteliği vardır ve name
öğelerinin bazıları l1
'da görünebilir veya görünmeyebilir. Yapmak istediğim ne
sözü elemanda nesnenin name
nitelik l1
görünen unsurların hiçbirini içermiyor hangi sözlüğe d1
, herhangi bir unsur atmak oldu.
Önemsiz bir örnek olarak:
l1 = ['cat', 'dog', 'mouse', 'horse', 'elephant',
'zebra', 'lion', 'snake', 'fly']
d1 = {'1':['dog', 'mouse', 'horse','orange', 'lemon'],
'2':['apple', 'pear','cat', 'mouse', 'horse'],
'3':['kiwi', 'lime','cat', 'dog', 'mouse'],
'4':['carrot','potato','cat', 'dog', 'horse'],
'5':['chair', 'table', 'knife']}
böylece elde edilen sözlük olacak aşağı yukarı aynı ancak her liste elemanları meyve ve sebze dışında 4
için 1
anahtar değer çiftlerini olacaktır, ve mobilya değerlerinin hiçbiri l1
'da görünmediğinden 5. anahtar/değer çiftini içermeyecektir.
Bunu yapmak için ben böyle görünüyordu yuvalanmış liste/Sözlük anlama kullandı:
d2 = {k: [a for a in l1 if a in d1[k]] for k in d1.keys()}
print(d2)
>>>>{'1': ['dog', 'mouse', 'horse'],
'3': ['cat', 'dog', 'mouse'],
'2': ['cat', 'mouse', 'horse'],
'5': [],
'4': ['cat', 'dog', 'horse']}
d2 = {k: v for k,v in d2.iteritems() if len(v)>0}
print(d2)
>>>>{'1': ['dog', 'mouse', 'horse'],
'3': ['cat', 'dog', 'mouse'],
'2': ['cat', 'mouse', 'horse'],
'4': ['cat', 'dog', 'horse'],}
Bu iş gibi görünüyor, ama büyük sözlüklerde, 7000+ öğeler için, üzerinden çalışmak için yaklaşık 20 saniye sürer. Kendi başına, korkunç değil, ama bunu 10.000 kez yineleyecek bir döngü içinde yapmam gerekiyor, bu yüzden şu anda mümkün değil. Bunu nasıl yapılacağına dair herhangi bir öneriniz var mı?
Not: O 'baskı izin vermeyin nedeniyle itertitems'' kullanımına piton 2.7 değil 3 kullanıyor() fool – jamylak
python 2.7 dict anlayışları var mı? – Claudiu
@Claudiu Evet, tamamen kopyalanabilir örnek sağlamak için – jamylak