【发布时间】:2019-04-01 05:57:43
【问题描述】:
假设我有一组用“分数”表示 URL 的元组:
{(0.75, 'http://www.foo.com'), (0.33, 'http://www.bar.com'), (0.5, 'http://www.foo.com'), (0.66, 'http://www.bar.com')}。
什么是过滤重复 URL 的简洁方法,只返回得分最低的 URL?也就是从上面的例子集合中,我想得到如下集合,其中每个 URL 只出现一次,与原始集合对应的分数最低:
{(0.5, 'http://www.foo.com'),(0.33, 'http://www.bar.com')}
我想出了以下解决方案:
from collections import defaultdict
seen = defaultdict(lambda:1)
for score, url in s:
if score < seen[url]:
seen[url] = score
filtered = {(v,k) for k,v in seen.items()}
...但我觉得可能有一些更简单,更有效的方法可以做到这一点,而无需使用中间 dict 来跟踪最大元素,然后从中重新生成集合。按第一个元素的最小值/最大值过滤一组元组的最佳方法是什么?
【问题讨论】:
-
我找到了a duplicate,但它很糟糕,我不想将它编辑成形状。因此,除非其他人想要这样做,否则我会等待答案发布在这里,然后将旧问题作为骗子关闭。
标签: python filter set tuples min