如何在人员列表中找到不同国家的人数?

2024-04-26 01:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在人员列表中找到不同国家的人数?我有一个简单的班上人

class Person(object):
    def __init__(self, nation, name):
        self.nation = nation
        self.name = name
        ...

我可以遍历列表和增量字典(如果存在key nation,则使用值1)并获得key si number of nations和count of members by nation,但我想知道是否还有其他类似python的方法,比如c#中的linq


Tags: ofkeynameself列表object人员init
1条回答
网友
1楼 · 发布于 2024-04-26 01:15:51

如果你想要不同国家的数目,你可以简单地取一个国家的len。例如:

class Person(object):
    def __init__(self, nation, name):
        self.nation = nation
        self.name = name

People = [Person("Canada", "Dave"), Person("Scotland", "Alex"), Person("Canada", "Fred"), Person("Japan", "Kenta")]

然后呢

>>> set(p.nation for p in People)
set(['Canada', 'Japan', 'Scotland'])
>>> {p.nation for p in People} # python 2.7
set(['Canada', 'Japan', 'Scotland'])
>>> len({p.nation for p in People})
3

(x for x in y)是一个“生成器表达式,{x for x in y}是一个“集合理解”(仅在2.7+中可用,它类似于列表理解,但适用于集合)

如果需要更具体的信息,可以使用Counter对象:

>>> from collections import Counter
>>> c = Counter(p.nation for p in People)
>>> c
Counter({'Canada': 2, 'Japan': 1, 'Scotland': 1})
>>> len(c)
3
>>> sum(c.values())
4

相关问题 更多 >