如何在人员列表中找到不同国家的数量?我有简单的类人
class Person(object):
def __init__(self, nation, name):
self.nation = nation
self.name = name
...
我可以遍历列表并增加字典(如果存在键国家,否则将值为 1)并获取国家的关键 si 数量和国家的成员数量,但我想知道是否有更多的 Pythonic 方式,如 c# 中的 linq
如何在人员列表中找到不同国家的数量?我有简单的类人
class Person(object):
def __init__(self, nation, name):
self.nation = nation
self.name = name
...
我可以遍历列表并增加字典(如果存在键国家,否则将值为 1)并获取国家的关键 si 数量和国家的成员数量,但我想知道是否有更多的 Pythonic 方式,如 c# 中的 linq
如果你想要不同国家的数量,你可以简单地取len
a set
。例如:
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