Então, eu tenho um arquivo com 9 números de telefone diferentes. Há uma linha para cada chamada e a duração. Quero adicionar a duração das chamadas e combiná-las com o número de telefone deles.
Aqui está parte do arquivo:
7803214567;94
7801234567;602
7801234567;910
7808765432;925
7801234567;631
O primeiro é o número de telefone e o segundo é a duração em segundos. Para ser mais claro, um exemplo: 7801234567
, Eu quero adicionar 602
, 910
e 631
e combine-o com seu próprio número de telefone 7801234567
.
Respostas:
3 para resposta № 1Parece que você deseja apenas contar o número total de minutos para cada número de telefone exclusivo.
Você poderia usar um contador:
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})
5 para resposta № 2
Usar 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
permite especificar uma chamada que cria um novo valor para uma chave ausente. Por exemplo, isso defaultdict
:
>>> call_times = defaultdict(int)
>>> call_times
defaultdict(int, {})
retorna 0
para uma chave não possui:
>>> call_times["a"]
0
porque usa int()
para essas chaves:
>>> int()
0
Portanto, você pode usar +=
para somar seus números:
>>> defaultdict(int, {"a": 0})
>>> call_times["b"] += 1
>>> call_times
defaultdict(int, {"a": 0, "b": 1})