В Python, как я могу сопоставить два списка кортежей по элементу кортежа? - PullRequest
2 голосов
/ 14 апреля 2011

Допустим, у меня есть names в качестве списка кортежей, которые содержат кортежи имен в произвольном порядке:

names = [(1,"Alice"), (2,"Bob")]

и genders в качестве другого списка кортежей, которые содержат корни полов в произвольном порядке:

genders = [(2,"male"), (1,"female")]

Как эффективно сопоставить два списка, используя первые элементы кортежей в качестве ключа для получения:

result = [("Alice","female"), ("Bob","male")]

Ответы [ 2 ]

7 голосов
/ 14 апреля 2011

Простой однострочный ответ, работает медленно:

[(name, gender) for (id0, gender) in genders for (id1, name) in names if id0==id1]

Лучший ответ (см. Ответ Игнацио):

namedict = dict(names)
genderdict = dict(genders)
[(namedict[id], genderdict[id]) for id in set(namedict) & set(genderdict)]
7 голосов
/ 14 апреля 2011

Преобразование в словари, сбор ключей и итерация.

...