在Python中如何通过元组元素匹配两个元组列表?
假设我有一个叫做 names
的列表,这个列表里面是一些名字的元组,顺序是随意的:
names = [(1,"Alice"), (2,"Bob")]
还有一个叫做 genders
的列表,这个列表里面是一些性别的元组,顺序也是随意的:
genders = [(2,"male"), (1,"female")]
我该如何有效地将这两个列表匹配起来呢?可以用元组中的第一个元素作为关键字来获取:
result = [("Alice","female"), ("Bob","male")]
2 个回答
7
把数据转换成字典格式,收集所有的键,然后进行遍历。
7
简单的一行代码答案,但运行得比较慢:
[(name, gender) for (id0, gender) in genders for (id1, name) in names if id0==id1]
更好的答案(可以看看Ignazio的回复):
namedict = dict(names)
genderdict = dict(genders)
[(namedict[id], genderdict[id]) for id in set(namedict) & set(genderdict)]