我有一个列表,其中包含一个类的简单对象,比如Person,即:
my_list [Person<obj>, Person<obj> ..]
Run Code Online (Sandbox Code Playgroud)
这Person object很简单,有各种变量,值如下:
Person_n.name = 'Philip'
Person_n.height = '180'
Person_n.lives_in = 'apartment'
Run Code Online (Sandbox Code Playgroud)
所以你可以看到,所有这些都Person住在某处,无论是公寓,房屋还是船.
我想创建一个新的列表,或字典(也不能不管哪个),其中我有这个列表排序的方式,他们通过自己的lives_in值进行分组和人口最多的选择是一把手在新的列表(或字典,其中lives_in值将是关键).
例如:
new_list = [('apartment', [Person_1, Person_5, Person_6, Person_4]), ('house': [Person_2, Peson_7]), ('boat': [Person_3])]
Run Code Online (Sandbox Code Playgroud)
我是Python的新手,我遇到了无休止的循环.必须有一种简单的方法来做到这一点,而不需要循环4次.
什么是Pythonic方法来实现这个理想的新列表?
您需要先将其排序,然后再将其传递给groupby:
sorted_list = sorted(my_list, key=lambda x: x.lives_in)
Run Code Online (Sandbox Code Playgroud)
然后使用itertools.groupby:
from itertools import groupby
groupby(sorted_list, key=lambda x: x.lives_in)
result = [(key, list(group)) \
for key, group in groupby(sorted_list, key=lambda x: x.lives_in)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |