Python 两个不同键的字典列表,如何找到交集?

Python 两个不同键的字典列表,如何找到交集?,python,list,Python,List,我的数据如下所示: 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

我的数据如下所示:

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"}]
蒂亚,
Chris

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

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

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

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

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

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

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

def find_intersection(buffer, layer):
    siteids = [a['siteid'] for a in layer]
    return [item for item in buffer if item['siteid'] in siteids]
像这样的

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]
像这样的

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]
像这样的

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]
像这样的

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]


和什么一样?图层列表是用来做什么的?@AidanKane,我更新了问题。和什么一样?图层列表是用来做什么的?@AidanKane,我更新了问题。和什么一样?图层列表是用来做什么的?@AidanKane,我更新了问题。和什么一样?图层列表的用途是什么?@AidanKane,我更新了这个问题。我更喜欢列表理解而不是
过滤器
[x为x,如果ID中的x['siteid']足够公平-不确定我为什么在这里使用过滤器-我通常使用列表理解。将更新我的答案。谢谢你的回答!与过滤器相比,更喜欢列表理解:
[x代表x,如果ID中有x['siteid'],则缓冲区中有x]
足够公平-不确定我为什么在这里使用过滤器-我通常使用列表理解。将更新我的答案。谢谢你的回答!与过滤器相比,更喜欢列表理解:
[x代表x,如果ID中有x['siteid'],则缓冲区中有x]
足够公平-不确定我为什么在这里使用过滤器-我通常使用列表理解。将更新我的答案。谢谢你的回答!与过滤器相比,更喜欢列表理解:
[x代表x,如果ID中有x['siteid'],则缓冲区中有x]
足够公平-不确定我为什么在这里使用过滤器-我通常使用列表理解。将更新我的答案。谢谢你的回答!谢谢你的回答!谢谢你的回答!谢谢你的回答!谢谢你的回答!谢谢你的回答!谢谢你的回答!谢谢你的回答!谢谢你的回答!