簡體   English   中英

兩個具有不同鍵的字典列表,如何找到交集?

[英]Two lists of dictionaries with some different keys, how to find intersection?

我的數據如下所示:

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 }]

我希望能夠返回站點ID相同的緩沖區列表的所有成員。

結果將是:

[{"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克里斯

我不知道有任何內置函數可以執行此操作,但是您可以嘗試編寫自己的函數來查找兩個字典的交集:

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]
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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM