[英]How to average values in a dictionary?
所以目前我有一個字典,其鍵和值設置為{'25308': 'Male', '9960': 'Male', '85748': 'Female', '8523': 'Female'}
。 我的目標是將數字與重合值平均。 我希望將其設置為 ```{'17634': 'Male', '47135': 'Female'}。 我還希望使用 for 循環來平均每個鍵和值。 我目前正在研究 python 3.7。 如果有人能給我見解或指出正確的方向,將不勝感激。 謝謝
嘿,您可以使用列表理解來過濾男性和女性
d = {'25308': 'Male', '9960': 'Male', '85748': 'Female', '8523': 'Female'}
male = [int(n) for n,k in d.items() if k=='Male']
female = [int(n) for n,k in d.items() if k=='Female']
然后你可以計算平均值並將其寫入字典
{
str(sum(male)/len(male)): 'Male',
str(sum(female)/len(female)): 'Female'
}
Output:
{'17634.0': 'Male', '47135.5': 'Female'}
我不完全確定你要的是什么,但我相信你想要平均所有的男性和女性鍵。
我會做這樣的事情
Dict = {'25308': 'Male', '9960': 'Male', '85748': 'Female', '8523': 'Female'}
maleTotal = 0
femaleTotal = 0
maleCount = 0
femaleCount = 0
for num, gender in Dict.items():
if gender=='Male':
maleCount+=1
maleTotal+=int(num)
else:
femaleCount+=1
femaleTotal+=int(num)
maleAverage = maleTotal / maleCount
femaleAverage = femaleTotal / femaleCount
print('Male Average: '+str(maleAverage)+' Female Average: '+str(femaleAverage))
你可以迭代你的 dict 來制作它。
dict = {'25308': 'Male', '9960': 'Male', '85748': 'Female', '8523': 'Female'}
result = {}
for key in dict.keys():
if dict[key] not in result:
result[dict[key]] = 0
result[dict[key]] += int(key)
output = {}
for key in result.keys():
output[result[key]] = key
如果你想用普通的 python 來 go 你可以試試defaultdict
from collections import defaultdict
di = {'25308': 'Male', '9960': 'Male', '85748': 'Female', '8523': 'Female'}
nd = defaultdict(list)
for i,j in di.items():
nd[j].append(int(i))
res = {i:sum(nd[i])/len(nd[i]) for i in nd}
# {'Female': 47135.5, 'Male': 17634.0}
d = {
'25308': 'Male',
'9960' : 'Male',
'85748': 'Female',
'8523' : 'Female'}
def avg_if_match(stryng):
stryng = stryng.lower()
numerator = 0
denominator = 0
for number, gender in d.items():
gender = gender.lower()
if (gender in stryng) or (stryng in gender):
numerator += number
denominator += 1
return numerator/denominator
female_avg = avg_if_match("fem")
def is_male(s):
return (s[0].lower() == "m")
def is_female(s):
return (s[0].lower() == "f")
male_data = filter(is_male, d)
male_avg = sum(male_data ) /len(male_data)
female_data = filter(is_female, d)
female_avg = sum(female_data ) /len(female_data)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.