【问题标题】:How to average values in a dictionary?如何平均字典中的值?
【发布时间】:2019-11-06 04:14:09
【问题描述】:

所以目前我有一个带有键和值设置的字典,如{'25308': 'Male', '9960': 'Male', '85748': 'Female', '8523': 'Female'}。我的目标是将数字与重合值平均。我希望将其设置为 ```{'17634': 'Male', '47135': 'Female'}。我还希望使用 for 循环来平均每个键和值。我目前正在研究 python 3.7。如果有人能给我见解或指出正确的方向,将不胜感激。谢谢

【问题讨论】:

  • 你的意思是分别平均所有男性值和所有女性值吗?
  • 只有malefemale 作为值吗?
  • 是的,这正是我要找的。我可能需要稍微简化我的字典来整理东西,但是是的。除了男性和女性之外,还有更多的价值观

标签: python dictionary average


【解决方案1】:

嘿,你可以使用列表推导来过滤男性和女性

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'
}

输出:

{'17634.0': 'Male', '47135.5': 'Female'}

【讨论】:

    【解决方案2】:

    我不完全确定您要的是什么,但我相信您想要平均所有男性和女性键。

    我会做这样的事情

    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))
    

    【讨论】:

      【解决方案3】:

      你可以迭代你的 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
      

      【讨论】:

        【解决方案4】:

        方法 1

        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")
        

        方法2

        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)
        

        【讨论】:

          猜你喜欢
          • 2021-10-12
          • 1970-01-01
          • 1970-01-01
          • 2023-04-03
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 2018-02-10
          相关资源
          最近更新 更多