根据条件从列表中选择两个项目

时间:2018-08-23 06:16:55

标签: python-3.x list dictionary

这是问题的简化版;)

给出以下列表,

my_list = [{'name': 'apple', 'type': 'fruit'},
    {'name': 'orange', 'type': 'fruit'},
    {'name': 'mango', 'type': 'fruit'},
    {'name': 'tomato', 'type': 'vegetable'},
    {'name': 'potato', 'type': 'vegetable'},
    {'name': 'leek', 'type': 'vegetable'}]

如何为特定类型从列表中仅选择两项以实现关注?

filtered = [{'name': 'apple', 'type': 'fruit'},
    {'name': 'orange', 'type': 'fruit'},
    {'name': 'tomato', 'type': 'vegetable'},
    {'name': 'leek', 'type': 'vegetable'}]

2 个答案:

答案 0 :(得分:1)

您可以groupby然后选择第2个:

from itertools import groupby

a = [list(j)[:2] for i, j in groupby(my_list, key = lambda x: x['type'])]

print(a)
[[{'name': 'apple', 'type': 'fruit'}, {'name': 'orange', 'type': 'fruit'}],
 [{'name': 'tomato', 'type': 'vegetable'},
  {'name': 'potato', 'type': 'vegetable'}]]


sum(a,[])
Out[299]: 
[{'name': 'apple', 'type': 'fruit'},
 {'name': 'orange', 'type': 'fruit'},
 {'name': 'tomato', 'type': 'vegetable'},
 {'name': 'potato', 'type': 'vegetable'}]

答案 1 :(得分:1)

您可以使用itertools.groupby根据type对列表中的元素进行分组,并且仅从每个组中获取前2个元素。

>>> from itertools import groupby
>>> f = lambda k: k['type']
>>> n = 2
>>> res = [grp for _,grps in groupby(sorted(my_list, key=f), f) for grp in list(grps)[:n]]
>>> pprint(res)
[{'name': 'apple', 'type': 'fruit'},
 {'name': 'orange', 'type': 'fruit'},
 {'name': 'tomato', 'type': 'vegetable'},
 {'name': 'potato', 'type': 'vegetable'}]