11
>>> a= ('one', 'a')
>>> b = ('two', 'b')
>>> c = ('three', 'a')
>>> l = [a, b, c]
>>> l
[('one', 'a'), ('two', 'b'), ('three', 'a')]

如何仅使用唯一的第二个条目(列?项目?)检查此列表的元素,然后获取列表中找到的第一个条目。所需的输出是

>>> l
[('one', 'a'), ('two', 'b')]
4

2 回答 2

16

使用一个集合(如果第二个项目是可散列的):

>>> lis = [('one', 'a'), ('two', 'b'), ('three', 'a')]
>>> seen = set()
>>> [item for item in lis if item[1] not in seen and not seen.add(item[1])]
[('one', 'a'), ('two', 'b')]

上面的代码等价于:

>>> seen = set()
>>> ans = []
for item in lis:
    if item[1] not in seen:
        ans.append(item)
        seen.add(item[1])
...         
>>> ans
[('one', 'a'), ('two', 'b')]
于 2013-09-05T19:10:48.773 回答
2

如果顺序不重要,您可以使用字典:

d = {}

for t in reversed(l):
    d[t[1]] = t

print d.values()

或更简洁地说:

{t[1]: t for t in reversed(l)}.values()

如果不反转列表,('three', 'a')将覆盖('one', 'a').

于 2013-09-05T19:19:48.357 回答