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