2017-06-21 39 views
0

這是我的代碼示例:如何計算字典中的相同索引?

budi = {"Name" : "Budi", "Gender" : "Male", "Age" : 18} 
ahmad = {"Name" : "Ahmad", "Gender" : "Male", "Age" : 7} 
ika = {"Name" : "Ika", "Gender" : "Female", "Age" : 18} 

marged = [budi, ahmad, ika] 

我想保持結果顯示相同的值或索引,例如:

male : 2 
+2

請不要附上文字圖片。只需將文本粘貼到您的問題中即可。 – smarx

+0

好的,我會編輯它 –

+0

這不是一個代碼示例,它是一些示例數據和一個處理後的樣子。你有沒有試圖自己解決這個問題? – SiHa

回答

0

我認爲你有一個記錄列表。 你想要的是計算「性別」是「男性」的記錄。

你可以做到這一點的一個小功能:

budi = {"Name" : "Budi", "Gender" : "Male", "Age" : 18} 
ahmad = {"Name" : "Ahmad", "Gender" : "Male", "Age" : 7} 
ika = {"Name" : "Ika", "Gender" : "Female", "Age" : 18} 

merged = [budi, ahmad, ika] 

def count_items(records, key, value): 
    values = [r[key] for r in records if key in r] 
    return values.count(value) 

例子:

print(count_items(merged, "Gender", "Male")) 
# -> 2 

print(count_items(merged, "Age", 7)) 
# -> 1 

當然,你可以簡化:

males = [r["Gender"] for r in merged].count("Male") 
+0

當然,如果你只有一個用法,這個功能就沒有必要了。 –

+0

有沒有一個循環的方法來做/它做? –

+0

當然,你可以使用for循環來代替列表理解,但是更加冗長。請參閱文檔:https://docs.python.org/3.6/tutorial/datastructures.html#list-comprehensions –

0

您可以隨時使用sum和條件的理解:

num_males = sum(1 for subdict in marged if subdict['Gender'] == 'Male') 

這遍歷所有字典marged(不應該叫merged?)和ch ecks如果'Gender''Male'。你也可以檢查的人數5歲和10之間是這樣的:

num_age_5_to_10 = sum(1 for subdict in marged if 5 <= subdict["Age"] <= 10) 

當然,你也可以用布爾條件更換1(因爲True相當於1False0):

num_males = sum(subdict['Gender'] == 'Male' for subdict in marged) 
num_age_5_to_10 = sum(5 <= subdict["Age"] <= 10 for subdict in marged)