Объединение списка и кортежа в списке

#python #list #dictionary #tuples

Вопрос:

Предположим, у меня есть следующие списки:

 l1 = [['a','b','c'],['x','y','z'],['i','j','k']] l2 = [(0,0.1),(0,0.2),(2,0.3),(2,0.4),(1,0.5),(0,0.6)]  

Я хочу объединить два списка по ключам l2 и индексу l1 так, чтобы я получил:

 [[0.1,['a','b','c'], [0.2,['a','b','c'], [0.3,['i','j','k'], [0.4,['i','j','k'], [0.5,['x','y','z'], [0.6,['a','b','c']]  

Интересно, как это делается? поскольку слияние происходит не по обоим ключам.

Ответ №1:

Достаточно простого понимания:

 [[v, l1[i]] for i, v in l2] # [[0.1, ['a', 'b', 'c']],  # [0.2, ['a', 'b', 'c']],  # [0.3, ['i', 'j', 'k']],  # [0.4, ['i', 'j', 'k']],  # [0.5, ['x', 'y', 'z']],  # [0.6, ['a', 'b', 'c']]]  

Ответ №2:

Понимание списка с некоторой индексацией сделает это хорошо

 l1 = [['a', 'b', 'c'], ['x', 'y', 'z'], ['i', 'j', 'k']] l2 = [(0, 0.1), (0, 0.2), (2, 0.3), (2, 0.4), (1, 0.5), (0, 0.6)]  result = [[value, l1[idx]] for idx, value in l2]  

Уравнение цикла for

 result = [] for idx, value in l2:  l1_item = l1[idx]  result.append([value, l1_item])  

Ответ №3:

 l1 = [['a','b','c'],['x','y','z'],['i','j','k']] l2 = [(0,0.1),(0,0.2),(2,0.3),(2,0.4),(1,0.5),(0,0.6)]  print([[v,l1[k]] for k,v in l2])