2013-10-09 5 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"}] 

ТИА, Крис

+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 для x в буфере, если x ['siteid'] в 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

Смежные вопросы