在python中如何通过元组元素匹配两个元组列表?

kad*_*dam 2 python tuples list

假设我有names一个包含任意顺序名称元组的元组列表:

names = [(1,"Alice"), (2,"Bob")]
Run Code Online (Sandbox Code Playgroud)

以及genders以任意顺序包含性别元组的另一个元组列表:

genders = [(2,"male"), (1,"female")]
Run Code Online (Sandbox Code Playgroud)

如何通过使用元组的第一个元素作为获取的键来有效地匹配这两个列表:

result = [("Alice","female"), ("Bob","male")]
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 7

转换为词典,收集密钥并进行迭代.


sve*_*rre 7

简单的单行答案,运行缓慢:

[(name, gender) for (id0, gender) in genders for (id1, name) in names if id0==id1]
Run Code Online (Sandbox Code Playgroud)

更好的答案(见Ignazio的回答):

namedict = dict(names)
genderdict = dict(genders)
[(namedict[id], genderdict[id]) for id in set(namedict) & set(genderdict)]
Run Code Online (Sandbox Code Playgroud)

  • 那是'O(n ^ 2)`而首先创建字典并迭代是'O(3n)~O(n)`...只是说,你不想为长列表做这个. (2认同)