6

我有一本形式为:

{"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
4

1 回答 1

8

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

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

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

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

这两种方法在另一个问题中进行了比较。

于 2012-10-20T21:07:02.250 回答