Вы можете сделать это компактно, используя набор пониманий. Например,
l1 = [{"key":1, "key2":2}, {"key":3, "key2":4}, {"key":5, "key2":6}, {"key":7, "key2":8}]
l2 = [{"key":0, "key2":2}, {"key":1, "key2":3}, {"key":2, "key2":4}]
key = "key2"
values = {d[key] for d in l1} & {d[key] for d in l2}
print(values)
выход
{2, 4}
Вы можете сделать код немного более читабельным, выполнив заданное понимание функции, хотя вызовы функций сделают код микроскопически медленнее.
def key_set(seq, key):
return {d[key] for d in seq}
values = key_set(l1, key) & key_set(l2, key)
Эта техника может быть обобщена для обработки любого количества списков.
all_lists = (l1, l2)
key = "key2"
values = set.intersection(*({d[key] for d in seq} for seq in all_lists))