Sözlüklerden üç listeleri var, A, B ve C GörünüĢüne:A sözlükleri listesi A ile Python'da A ve C'nin ortak özelliklerine sahip olan B listesinin C listesi ile mi eşleştiriliyor?
A = [{propA1: valueA1}, {propA1: valueA2}, ...]
B = [{propB1: valueB1, propB2: valueB2}, {propB1: valueB3, propB2: value4}, ...]
C = [{propC1: valueC1}, {propC1: valueC2}, ...]
propA1
ve propB1
propB2
ve propC1
de aynı özellikleri olan, aynı özellikleri, ancak farklı adıdır. Ancak , propA1
ve propB1
hep aynı değerleri yok ama dizide [valueA1, valueA2, ...]
ve [valueB1, valueB2, ...]
ait "set kesişme" sadece ilgileniyorum, burada hedeftir: Ben B
böyle tüm propB2
dönmek istiyorum onların propB1
muadili (Aynı sözlükte) A. propA1
ile eşleşir. Sonra C
içinde propC1
ile eşleşecek şekilde kullanacağım. Ben denedim ne
: Bu döngünün sonunda
propB2_match = set()
for elementB in B:
for elementA in A:
if elementB['propB1'] == elementA['propA1']:
propB2_match(elementB['propB2'])
break
, ben propC1
ile eşleştirmek için kullanabileceğiniz propB2
tümünü içeren propB2_match
var. Ancak, döngüden görebileceğiniz gibi, bu pahalı bir O(n^2)
döngüdür. Bunu, O(n)
ile halletmenin bir yolu olup olmadığını merak ediyorum? Değilse, üzerinde herhangi bir pythonic optimizasyon yapılabilir mi?
Not: Bir veritabanına koymak ve birleştirme işlemek için ilişkisel veritabanı SQL kullanmak istemiyorum.
Bölümü tekrar kalınca okuyabiliyorsunuz, bu propB2'nin propB1'inin tümüyle eşleşmesini istediğinizi belirttiğinizden net değil. probA1 (bildirim pr op ve prob) ve daha önce söylediklerini verdikten sonra neden B2 değeri ve valueB1 değeri ele alınacak? – PyNEwbie
Temel olarak "birleştirme" uygulayabilirsiniz. Yeni bir Dict A 'değeri' bir elemente '{propA1: valueA1}' eşleştiren A 've' valueB1 'öğesini bir öğeye' {propB1: valueB1, propB2: valueB2} 'eşleyen yeni bir D 'B' ve sonra kullan 'itertools.groupBy 'sonuçlarına – spiffman
@PyNEwbie sorumu güncelledim. –