【问题标题】:Get averages from a dictionary in Python从 Python 中的字典中获取平均值
【发布时间】:2020-04-14 23:13:13
【问题描述】:

例如,如果我有下一个字典,则从 python 字典中获取平均值:

students={'Dan':(5,8,8), 'Tim':(7), 'Richard':(9,9)}

我想以下面的形式打印字典:

results={'Dan':(7), 'Tim':(7), 'Richard':(9)}

有什么可以使用的功能吗?我是 python 中的新编码,所以字典对我来说有点混乱。

【问题讨论】:

  • 为了清楚起见,(7) 在 python 中不是一个东西。你有整数7 和元组中的整数(7,)。你希望总和是元组吗?
  • 是的!我正在尝试使用元组。
  • @tdelaney 我很确定当他/她回答“是”时,OP 认为您所指的 (7) 是输入中的那个,否则数据结构将没有多大意义.我会让 OP 自己编辑问题,因为编辑会实质性地改变预期的数据结构。
  • @blhsing - 由于 OP 刚才的评论,我进行了更改。我们应该让 OP 决定。

标签: python python-2.7 dictionary average


【解决方案1】:

如果您希望 avg 值是一个元组元素(我看不出有任何理由这样做,但也许我没有足够的上下文),请尝试:

results={k: (sum(v)/len(v),) for k,v in students.items()}

【讨论】:

  • tuple 构造函数需要一个可迭代对象作为参数。
  • 您可以简单地使用元组文字,而不是使用列表文字将其转换为元组:(sum(v) / len(v),)
  • @blhsing 再次感谢 :)
【解决方案2】:

我愿意:

result = {}
for k, v in students.items():
  if type(v) in [float, int]:
    result[k] = v
  else:
    result[k] = sum(v) / len(v)

【讨论】:

    【解决方案3】:

    我正在尝试这个,但意识到我们在对长度为 1 的元组求和时遇到问题。所以你可以这样做。

    results = {}
    for k, v in students.items():
        print(v)
        if (isinstance(v, int)):
            results[k] = v
        else:
            results[k] = sum(v) / len(v)
    

    【讨论】:

    • 它不是长度为 1 的元组,它是一个 int。 (1, ) != (1)
    • 是的,我就是这个意思。其他值都是元组,但一个是 int。
    【解决方案4】:

    pythonic 解决方案是使用字典理解来创建结果字典。

    def avg(l):
        return sum([l]) / len(l)
    
    results = {key: (avg(val)) for (key, val) in students.items()}
    

    您需要在总和周围加上括号,以便将元组视为列表。我会进一步将数据结构更改为列表而不是元组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多