【问题标题】:Average of the first items of tuples in a dict字典中元组第一项的平均值
【发布时间】:2012-10-11 03:38:29
【问题描述】:

我有一本字典,格式为:

{"a": (1, 0.1), "b": (2, 0.2), ...}

每个元组对应(分数,标准差)。 如何取每个元组中第一个整数的平均值? 我试过这个:

for word in d:
    (score, std) = d[word]
    d[word]=float(score),float(std)
    if word in string:
        number = len(string)
        v = sum(score)
        return (v) / number

得到这个错误:

    v = sum(score)
TypeError: 'int' object is not iterable

【问题讨论】:

    标签: python list dictionary tuples average


    【解决方案1】:

    使用list comprehensions 很容易做到。首先,您可以从d.values() 获取所有字典值。要列出每个值中的第一项,您可以创建一个类似[v[0] for v in d.values()] 的列表。然后,只需将这些元素的总和除以字典中的项目数:

    sum([v[0] for v in d.values()]) / float(len(d))
    

    正如 Pedro 正确指出的那样,这实际上创建了列表,然后进行了求和。如果您有一个巨大的字典,这可能会占用大量内存并且效率低下,因此您需要generator expression 而不是列表理解。在这种情况下,这只是意味着去掉一对括号:

    sum(v[0] for v in d.values()) / float(len(d))
    

    两种方法比较in another question

    【讨论】:

    • 您实际上并不需要列表推导,sum 将采用任何可迭代对象,因此sum(v[0] for v in d.values()) 中的生成器表达式无需创建中间列表即可工作。
    • 好点。我只是觉得像这样构建表达式更清晰一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2018-06-08
    相关资源
    最近更新 更多