2013-01-14 43 views
1

如何查找人員列表中不同國家的人數?我有簡單的類人如何查找人員列表中不同國家的人數?

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

我可以通過列表和增量的字典迭代(如果存在的關鍵國家要不然就把值爲1),並獲得多項國家和民族的成員數的關鍵SI數量,但我不知道是還有更多pythonic的方式,像c#中的linq#

回答

5

如果你想要不同國家的數量,你可以簡單地把lenset。例如:

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 
+0

+1。我不僅速度太慢,而且對於更完整的答案我太慢了。 –

相關問題