元组的平均值

Bil*_*ann 5 python dictionary tuples average list

我有一个字典:

{"a":(1, 0.1) , "b":(2, 0.2) , ...}
Run Code Online (Sandbox Code Playgroud)

每个括号都是一个元组,对应于(分数,标准差).如何获取每个元组中第一个整数的平均值?我试过这个:

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
Run Code Online (Sandbox Code Playgroud)

得到此错误:

    v = sum(score)
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

Mik*_*ike 7

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

sum([v[0] for v in d.values()]) / float(len(d))
Run Code Online (Sandbox Code Playgroud)

正如Pedro正确指出的那样,这实际上创建了列表,然后完成了总和.如果你有一个庞大的字典,这可能会占用大量内存并且效率低下,所以你需要一个生成器表达式而不是列表理解.在这种情况下,这只是意味着摆脱一对括号:

sum(v[0] for v in d.values()) / float(len(d))
Run Code Online (Sandbox Code Playgroud)

在另一个问题中比较这两种方法.

  • 你实际上并不需要列表推导,`sum`将采用任何迭代,因此`sum(v [0] for v in d.values())`中的生成器表达式将在不创建中间列表的情况下工作. (3认同)