如何解决使用itemgetter和list comp过滤元组列表,以便基于元组中的第二个项目获得唯一项
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')]
我想使用itemgetter获得以下内容。它是元组中第二个项目中唯一的元组中第一项的最大值:
[(1800000.0,'FB')]
我尝试过的事情:
[max(items) for key,items in groupby(a,key = itemgetter(1))]
但是它返回完整列表,尽管它是accepted answer。
如何使用具有列表理解功能的itemgetter
获得所需的输出?
解决方法
itertools.groupby
根据某些键将连续相等的值分组。为了使其正常工作,您必须根据第二个字段进行排序。但是随后,对于我们所需要的来说,复杂性就变得不必要地高了。
在这里,使用字典可能会更好。我们可以将键默认设置为0
,并在发现更高的值时进行更新:
d = {}
for v,k in a:
if d.setdefault(k,0) < v:
d[k] = v
print(d)
{'google': 1800000.0,'IBM': 1440000.0,'FB': 720000.0}
要获得与上述相同的格式:
[(v,k) for k,v in d.items()]
[(1800000.0,'google'),(1440000.0,'IBM'),(720000.0,'FB')]
,
groupby()
仅适用于 adjacent 相似的元素。如果您希望列表捕获并组合具有相同键的 all 元素,则需要先按相同的键(sorted(a,key=itemgetter(1))
)对列表进行排序:
[max(items) for _,items in groupby(sorted(a,key=itemgetter(1)),key = itemgetter(1))]
# [(720000.0,'FB'),(1800000.0,'google')]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。