Вот простое решение -
list_1 = [[9, u'bob'], [18, u'alice']]
list_2 = [[1, 'officer'], [2, 'nurse'], [9, 'teacher'],[18, 'unknown']]
new_list = []
for i in list_1:
for j in list_2:
if i[0]==j[0]:
new_list.append([i[1],j[1]])
Вот одна строка для того же, но она помещает элементы в кортеж -
>> [(x[1], y[1]) for x in list_1 for y in list_2 if x[0] == y[0]]
[('bob', 'teacher'), ('alice', 'unknown')]
Чтобы получить список списков -
>> [list(elem) for elem in [(x[1], y[1]) for x in list_1 for y in list_2 if x[0] == y[0]]]
[['bob', 'teacher'], ['alice', 'unknown']]