Python:合并统计数据

3 投票
11 回答
785 浏览
提问于 2025-04-16 17:18

好的,我知道这个问题之前应该有人回答过,但我找不到……

我的问题是:我有一个包含多个列表的列表,内容如下:

0.2 A

0.1 A

0.3 A

0.3 B

0.2 C

0.5 C

我的目标是输出以下内容:

0.6 A

0.3 B

0.7 C

换句话说,我需要把多行的数据合并在一起。

这是我正在使用的代码:

unique_percents = []

for line in percents:
    new_percent = float(line[0])
    for inner_line in percents:
        if line[1] == inner_line[1]:
           new_percent += float(inner_line[0])
        else:
            temp = []
            temp.append(new_percent)
            temp.append(line[1])
            unique_percents.append(temp)
            break

我觉得这个代码应该能工作,但它没有把百分比加起来,而且还保留了重复的项。也许我对“break”的用法理解得不太对?

我也欢迎更好的循环结构或算法的建议。谢谢,David。

11 个回答

2

在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念或者使用了不合适的代码。

比如说,有些人可能在使用某个函数的时候,不太清楚这个函数的具体作用或者参数应该怎么传递。这就像是你在使用一个工具,但不知道它的每个按钮是干什么的。

在这种情况下,查阅相关的文档或者在网上搜索解决方案是很有帮助的。很多时候,其他人也遇到过类似的问题,他们会在网上分享他们的经验和解决方法。

总之,遇到问题时,不要着急,慢慢查找资料,理解每个部分的功能,最终你会找到解决方案的。

total = {}
data = [('0.1', 'A'), ('0.2', 'A'), ('.3', 'B'), ('.4', 'B'), ('-10', 'C')]
for amount, key in data:
    total[key] = total.get(key, 0.0) + float(amount)

for key, amount in total.items():
    print key, amount
3

试试这个:

result = {}
for line in percents:
    value, key = line
    result[key] = result.get(key, 0) + float(value)
6

你想使用字典,但这里有个叫做 collections.defaultdict 的东西会非常有用,这样你就不用担心字典里有没有这个键了——它会自动把不存在的键的值设为0.0。

import collections

lines = [[0.2, 'A'], [0.1, 'A'], [0.3, 'A'], [0.3, 'B'], [0.2, 'C'], [0.5, 'C']]
amounts = collections.defaultdict(float)
for amount, letter in lines:
    amounts[letter] += amount

for letter, amount in sorted(amounts.iteritems()):
    print amount, letter

撰写回答