问题描述
a = [(1800000.0,'google'),(1440000.0,'IBM'),(1260000.0,(1008000.0,(990000.0,(792000.0,(720000.0,'FB'),(600000.0,(504000.0,(480000.0,(420000.0,(400000.0,(396000.0,(336000.0,(330000.0,(320000.0,(280000.0,(264000.0,(240000.0,(224000.0,(220000.0,(176000.0,(168000.0,(160000.0,(132000.0,(112000.0,(88000.0,'FB')]
我想得到以下信息(列表理解是我要实现的目标):
[(1800000.0,'FB')]
基本上,获得每个元组的每个唯一第二个参数的最大值。
我尝试过的(伪):
[max(x) for x in a if x[1] not in this list]
# I don't kNow if / how I can refer to the list comprehension list while
# its being built
解决方法
您也可以使用set
a = [(1800000.0,'google'),(1440000.0,'IBM'),(1260000.0,(1008000.0,(990000.0,(792000.0,(720000.0,'FB'),(600000.0,(504000.0,(480000.0,(420000.0,(400000.0,(396000.0,(336000.0,(330000.0,(320000.0,(280000.0,(264000.0,(240000.0,(224000.0,(220000.0,(176000.0,(168000.0,(160000.0,(132000.0,(112000.0,(88000.0,'FB')]
a.sort(key=lambda x: x[0],reverse=True)#sort by 1 tuple value
ans = []
s = set() #we save the values of names that have already been used
for i in a:
if i[1] not in s:
ans.append(i)
s.add(i[1])
del s
print(ans)