1

人のリストで異なる国の数を見つける方法は? 私は単純なクラス Person を持っています

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

リストを反復処理して辞書をインクリメントし (キーの国が存在する場合は値 1 を指定)、国ごとのキー si の数とメンバーの数を取得できますが、C# の linq のように、これ以上 Pythonic な方法があるのではないかと思います。

4

1 に答える 1

5

異なる国の数が必要な場合は、単純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
于 2013-01-14T14:50:35.743 に答える