我有三个字典列表,A,B和C。它们看起来像:
A = [{propA1: valueA1}, {propA1: valueA2}, ...]
B = [{propB1: valueB1, propB2: valueB2}, {propB1: valueB3, propB2: value4}, ...]
C = [{propC1: valueC1}, {propC1: valueC2}, ...]
propA1
和propB1
是相同的属性,但名称不同,propB2
和propC1
也是相同的属性。
然而,propA1
和propB1
并不总是有相同的值,但我只对数组[valueA1, valueA2, ...]
和[valueB1, valueB2, ...]
的“集合相交”感兴趣,这里的目标是:我想返回B
中的所有propB2
,这样它们的propB1
对应项(在同一个字典中)与A中的propA1
匹配。然后我将使用该propB2
集合来匹配propC1
在C
。
我尝试过:
propB2_match = set()
for elementB in B:
for elementA in A:
if elementB['propB1'] == elementA['propA1']:
propB2_match(elementB['propB2'])
break
在这个循环的末尾,我有propB2_match
包含所有propB2
,我可以用它来匹配propC1
。
但是,从循环中可以看到,这是一个昂贵的O(n^2)
循环。我想知道有没有办法用O(n)
来处理这个问题?如果没有,是否有任何pythonic优化可以做的呢?你知道吗
注意:我不想把它放在数据库中并使用关系数据库SQL来处理连接操作。你知道吗
如果我理解正确的话,您尝试在a和B上做一个连接,其中列a['propA1']==B['propB1']。你知道吗
使用defaultdict的一种方法是O(len(A)+len(B)):
输出:
此时,您可以将每个dict列表合并为一个dict或任何您需要的内容,并使用结果与第三个列表C连接
相关问题 更多 >
编程相关推荐