Как заменить элементы двумерного списка в соответствии с данными из словаря?
Имеются словарь и двумерный список:
a = {'loc01': 'moscow',
'loc02': 'piter',
'loc03': 'new_york'}
b = [['john', 'loc01'],
['sam', 'loc01'],
['bob', 'loc03'],
['bill', 'loc01'],
['jim', 'loc02']]
Нужно на основе словаря и списка создать новый список вида:
total = [['john', 'loc01', 'moscow'],
['sam', 'loc01', 'moscow'],
['bob', 'loc03', 'new_york'],
['bill', 'loc01', 'moscow'],
['jim', 'loc02', 'piter']]
Т.е. сравнить ключ:значение в словаре a, и если в списке b есть элемент строки, название которого равно названию ключа, то добавить к списку b соответствующее ключу значение словаря в новом списке total.
Ответы (2 шт):
Автор решения: Danis
→ Ссылка
def f(a, b):
return [b[i] + ([a[b[i][1]]] if b[i][1] in a else [None]) for i in range(len(b))]
Автор решения: MaxU
→ Ссылка
res = [x + [a.get(x[1])] for x in b]
результат:
[['john', 'loc01', 'moscow'],
['sam', 'loc01', 'moscow'],
['bob', 'loc03', 'new_york'],
['bill', 'loc01', 'moscow'],
['jim', 'loc02', 'piter']]
проверка для случая когда в a нет соответствующего элемента:
In [13]: b
Out[13]:
[['john', 'loc01'],
['sam', 'loc01'],
['bob', 'loc03'],
['bill', 'loc01'],
['jim', 'loc02'],
['max', 'loc99']]
In [14]: res = [x + [a.get(x[1])] for x in b]
In [15]: res
Out[15]:
[['john', 'loc01', 'moscow'],
['sam', 'loc01', 'moscow'],
['bob', 'loc03', 'new_york'],
['bill', 'loc01', 'moscow'],
['jim', 'loc02', 'piter'],
['max', 'loc99', None]] # <------ Note!