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,克里斯

4

3 回答 3

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]
于 2013-10-09T14:28:24.203 回答
1

我不知道有任何内置函数可以做到这一点,但您可以尝试编写自己的函数来查找两个 dicts 的交集:

def find_intersection(buffer, layer):
    siteids = [a['siteid'] for a in layer]
    return [item for item in buffer if item['siteid'] in siteids]
于 2013-10-09T14:27:07.263 回答
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]
于 2013-10-09T14:27:20.217 回答