這裏我們可以使用collections.Counter
:
from collections import Counter
answers = [
{'Question 1': {'Job': 'job1', 'Country': 'USA', 'Car': 'Porche'}},
{'Question 1': {'Job': 'job2', 'Country': 'UK', 'Car': 'Nissan'}},
{'Question 3': {'Job': 'job8', 'Country': 'GR', 'Car': 'Toyota'}},
{'Question 4': {'Job': 'job1', 'Country': 'USA', 'Car': 'Toyota'}},
{'Question 4': {'Job': 'job5', 'Country': 'USA', 'Car': 'Toyota'}},
{'Question 4': {'Job': 'job5', 'Country': 'USA', 'Car': 'Porche'}},
]
counted = Counter([item for q in answers for answer in q.values() for item in answer.items()])
我已經改名爲list
到answers
以避免與內建的list()
混淆。
Counter
統計列表中的單個項目,因此我們在這裏執行的操作是使用列表理解從列表中提取單個項目 - 因爲問題似乎並不重要,給出您的示例,然後使用反算他們。請注意,這是相當複雜的列表理解,因爲您的數據結構有點尷尬,您可能需要考慮更改它。這則返回:
Counter({
('Country', 'USA'): 4,
('Car', 'Toyota'): 3,
('Job', 'job5'): 2,
('Job', 'job1'): 2,
('Car', 'Porche'): 2,
('Job', 'job8'): 1,
('Job', 'job2'): 1,
('Country', 'UK'): 1,
('Car', 'Nissan'): 1,
('Country', 'GR'): 1
})
如果您想選擇個性的東西,你可以做,例如:
countries = [(key, value) for (key, value) in counted.items() if key[0] == "Country"]
這給了我們:
[
(('Country', 'UK'), 1),
(('Country', 'GR'), 1),
(('Country', 'USA'), 4)
]
如果你需要算回答所述問題的用戶數量,通過改變列表理解選出的內容來簡單地改變計數器的焦點,例如:
countedQuestions = Counter([question for q in answers for question in q])
這給了我們:
Counter({
'Question 4': 3,
'Question 1': 2,
'Question 3': 1
})
而且Counter
對象是dict
樣,所以你可以用它們當作一個dict
:
print("Number of users that answer Question 4:", countedQuestions['Question 4'])
Number of users that answer Question 4: 3
其他什麼('...' )你想要執行的搜索? – 2012-03-05 12:52:41
@Tichodroma,如果有其他配置文件項目。 (如年齡,城市,國家)。感謝幫助。 – TheNone 2012-03-05 12:54:12
不要使用'list'作爲變量名稱。這樣你就隱藏了原來的'list'函數。 – pkit 2012-03-05 12:54:31