2013-10-09 27 views
0

我的数据是这样的:两个列表与一些不同的密钥字典,如何找到交集?

buffer = [{"siteid": 1 , "distance": 2, "codes": "1|b|c", "urv": "545"}, {"siteid": 2 , "distance": 2, "codes": "1|b|c", "urv": "55"}, {"siteid": 2 , "distance": 2, "codes": "1|b|c", "urv": "55"}, {"siteid": 3 , "distance": 2, "codes": "1|b|c", "urv": "546"}] 
layer = [{"siteid": 2 }, {"siteid": 4 }, {"siteid": 3 }] 

我希望能够返回所有缓冲区列表的成员,其中SITEID是一样的。

其结果将是:

[{"siteid": 2 , "distance": 2, "codes": "1|b|c", "urv": "55"}, {"siteid": 2 , "distance": 2, "codes": "1|b|c", "urv": "55"}, {"siteid": 3 , "distance": 2, "codes": "1|b|c", "urv": "546"}] 

TIA, 克里斯

+3

同样的是什么?什么是图层列表? –

+0

@AidanKane,我更新了问题。 – CLJ

回答

1

这样的事情?

buffer = [{"siteid": 1 , "distance": 2, "codes": "1|b|c", "urv": "545"}, {"siteid": 2 , "distance": 2, "codes": "1|b|c", "urv": "55"}, {"siteid": 2 , "distance": 2, "codes": "1|b|c", "urv": "55"}, {"siteid": 3 , "distance": 2, "codes": "1|b|c", "urv": "546"}] 
layer = [{"siteid": 2 }, {"siteid": 4 }, {"siteid": 3 }] 
ids = [l['siteid'] for l in layer] 
print [b for b in buffer if b['siteid'] in ids] 
+0

首选列表解析到'filter':'[x for x in buffer if x ['siteid'] in ids]' –

+0

够公平 - 不确定为什么我在这里使用过滤器 - 我通常使用列表解析。将更新我的答案。 –

+0

谢谢你的回答! – CLJ

1

我不知道,能做到这一点任何内置的,但你可以尝试编写自己的功能找到的交集你的两个词:

def find_intersection(buffer, layer): 
    siteids = [a['siteid'] for a in layer] 
    return [item for item in buffer if item['siteid'] in siteids] 
+0

谢谢你的回答! – CLJ

1
intersection = set(x['sideid'] for x in buffer) & set(x['siteid'] for x in layer) 
return [x for x in buffer if x['sideid'] in intersection] 
+0

谢谢你的回答! – CLJ

相关问题