Python: поиск подходящих записей в двух списках словарей (с разными именами ключей) - PullRequest
0 голосов
/ 17 января 2020

У меня есть два списка словарей с разными ключами, но перекрывающимися значениями, что-то вроде этого:

list_a = [{key1: value_a, key2: value_b}, {key1: value_c, key2: value_d}, ...]
list_b = [{key3: value_a, key4: value_z}, {key3: value_c, key4: value_z}, ...]

Я хочу объединить их вместе, чтобы я мог добавить key4 к list_a или указать, что соответствующая запись не найдена.

Я использовал вложенный for l oop, чтобы сделать это следующим образом:

for i in list_a:
    for v in list_b:
        if i["key1"] == v["key3"]:
            i["key4"] = v["key4"]
        else:
            i["key4"] = False

Это не кажутся очень эффективными в программном плане, так как мне нужно l oop через все list_b для каждого значения list_a. Есть ли более эффективный способ сделать это?

Фактические данные, с которыми я работаю, являются более сложными, поэтому у меня есть несколько условий для сопоставления в каждом списке.

Я посмотрел в понимании списка, но не был уверен, какой путь к go с этим.

Любые указатели (для этого новичка!) приветствуются!

Редактировать: Ожидаемый результат:

list_a = [{key1: value_a, key2: value_b, key4: value_z},
          {key1: value_c, key2: value_d, key4: value_z},
          {key1: value_e, key2: value_f, key4: False}, ...]

Обычно находят подходящие записи в list_b - list_a на основе значений, затем обновляют list_a другими парами kv из совпадений или указывают, что совпадение не найдено.

1 Ответ

0 голосов
/ 17 января 2020

Преобразование list_b в dict для удобства поиска

Пример:

list_a = [{key1: value_a, key2: value_b}, {key1: value_c, key2: value_d}, ...]
list_b = [{key3: value_a, key4: value_z}, {key3: value_c, key4: value_z}, ...]

list_b_l = {i['key3']: i['key4'] for i in list_b}

for i in list_a:
    i['key4'] = list_b_l.get(i['key1'], False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...