簡體   English   中英

如何平均字典中的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM