Python 使用itemgetter和list comp筛选元组列表,以便基于元组中的第二项获取唯一项

Python 使用itemgetter和list comp筛选元组列表,以便基于元组中的第二项获取唯一项,python,list,list-comprehension,Python,List,List Comprehension,我有一张这样的清单: a = [(1800000.0, 'google'), (1440000.0, 'IBM'), (1260000.0, 'google'), (1008000.0, 'IBM'), (990000.0, 'google'), (792000.0, 'IBM'), (720000.0, 'FB'), (600000.0, 'google'), (504000.0,'FB'), (480000.0, 'IBM'), (420000.0, 'google'), (400000.

我有一张这样的清单:

a = [(1800000.0, 'google'), (1440000.0, 'IBM'), (1260000.0, 'google'), (1008000.0, 'IBM'),
(990000.0, 'google'), (792000.0, 'IBM'), (720000.0, 'FB'), (600000.0, 'google'), 
(504000.0,'FB'), (480000.0, 'IBM'), (420000.0, 'google'), (400000.0, 'google'),
(396000.0, 'FB'), (336000.0, 'IBM'), (330000.0, 'google'), (320000.0, 'IBM'),
(280000.0, 'google'), (264000.0, 'IBM'), (240000.0, 'FB'), (224000.0, 'IBM'),
(220000.0, 'google'), (176000.0, 'IBM'), (168000.0, 'FB'), (160000.0, 'FB'),
(132000.0, 'FB'), (112000.0, 'FB'), (88000.0, 'FB')]
我想使用itemgetter获得以下内容。它是元组中第一项的最大值,每个元组的第二项都是唯一的:

[(1800000.0, 'google'), (1440000.0, 'IBM'), (720000.0, 'FB')]
我所尝试的:

[max(items) for key, items in groupby(a,key = itemgetter(1))]
但是它返回完整的列表,尽管它是


如何使用具有列表理解功能的
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}

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}
groupby()
仅适用于相邻的类似元素。如果希望列表捕获并组合具有相同键的所有元素,则需要首先按相同键对列表进行排序(
sorted(a,key=itemgetter(1))

[max(items) for _, items in groupby(sorted(a, key=itemgetter(1)), key = itemgetter(1))]
# [(720000.0, 'FB'), (1440000.0, 'IBM'), (1800000.0, 'google')]
groupby()
仅适用于相邻的类似元素。如果希望列表捕获并组合具有相同键的所有元素,则需要首先按相同键对列表进行排序(
sorted(a,key=itemgetter(1))

[max(items) for _, items in groupby(sorted(a, key=itemgetter(1)), key = itemgetter(1))]
# [(720000.0, 'FB'), (1440000.0, 'IBM'), (1800000.0, 'google')]

您需要按元组中的第二项对
a
排序才能正确使用
groupby
您需要按元组中的第二项对
a
排序才能正确使用
groupby