Объединение списков на основе общего значения

#python #list

Вопрос:

У меня есть следующие два списка, l1 и l2 .

 l1 = [('8012387', {'key': values}), ('10556298', {'key': values}), ...]
l2 = [('8012387', 'TextA'), ('10556298', 'TextB'), ...]
 

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

 [('TextA', {'key': values}), ('textB', {'key': values}), ...]
 

Я не знал, с чего начать.

Комментарии:

1. являются ли они одинаковой длины и порядка? Если это так, я бы начал с определения диапазона для них, а затем сделал бы понимание списка с созданием кортежа (l2[i][1], l1[i][1])

2. Находятся ли списки в одном и том же порядке, или вам нужно найти общие значения?

3. Если вам нужно найти соответствующие значения, используйте вложенные циклы или преобразуйте один из списков в словарь.

4. Оба списка имеют одинаковую длину и порядок.

Ответ №1:

Вы можете создать l2 диктант для поиска ключей, а затем создать список, который вы хотите, с пониманием списка:

 l1 = [('8012387', {'key': 'values'}), ('10556298', {'key': 'values2'})]
l2 = [('8012387', 'TextA'), ('10556298', 'TextB')]

d_l2 = dict(l2)

[(d_l2[k], obj) for k, obj in l1]
# [('TextA', {'key': 'values'}), ('TextB', {'key': 'values2'})]
 

Это предполагает, что все ключи присутствуют внутри l2 . Если нет, вам придется определить поведение, которое вы хотите в этом случае.

Если списки выровнены (т. Е. l2[0 ] соответствуют и l1[0] т. Д.). Вы можете просто застегнуть их на молнию:

 [(k, v) for (_1, v), (_2, k) in  zip(l1, l2)]