如何在python中的多行中添加不同的数字?

时间:2016-01-15 21:33:37

标签: python dictionary

所以我有一个包含9个不同电话号码的文件。每次通话都有一条线路和持续时间。我想将呼叫的持续时间加起来,并将它们与自己的电话号码相匹配。

以下是文件的一部分:

    7803214567;94
    7801234567;602
    7801234567;910
    7808765432;925
    7801234567;631

第一个是电话号码,第二个是持续时间,以秒为单位。为了更清楚,例如:7801234567,我想添加602910631,并将其与自己的电话号码7801234567相匹配。< / p>

2 个答案:

答案 0 :(得分:5)

使用defaultdict

from collections import defaultdict

call_times = defaultdict(int)

with open('phone.txt') as fobj:
    for line in fobj:
        number, call_time = line.split(';')
        call_times[number.strip()] += int(call_time)

>>> call_times
defaultdict(int, {'7801234567': 2143, '7803214567': 94, '7808765432': 925})

defaultdict允许指定为缺失键创建新值的可调用对象。例如,这个defaultdict

>>> call_times = defaultdict(int)
>>> call_times
defaultdict(int, {})

返回0以获取它没有的密钥:

>>> call_times['a']
0

因为它使用int()来表示这些键:

>>> int()
0

因此,您可以使用+=为您添加数字:

>>> defaultdict(int, {'a': 0})
>>> call_times['b'] += 1
>>> call_times
defaultdict(int, {'a': 0, 'b': 1})

答案 1 :(得分:3)

您似乎只想计算每个唯一电话号码的总分钟数。

您可以使用counter

from collections import Counter
c = Counter()

with open("path/to/file.txt", 'r') as f:
    for line in f:
        k, v = line.split(";")
        c += Counter({k: int(v)})

>>> print(c)
Counter({'7801234567': 2143, '7808765432': 925, '7803214567': 94})