Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2013 21:05:40

mflash123
Зарегистрирован: 2013-10-29
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск дубликатов и суммирование значений по ключу

Всем привет,бьюсь битый час над задачей
Имеется csv с 2 полями
12 456
1 9404
45 34234
32 456

Необходимо вывести все записи,но сложить сумму первой колонки у повторяющихся значений из второй.Т.е. так должен выглядеть результат:
44 456
1 9404
45 34234

По логике,можно бы было сделать ее, как в двумерном массиве-искать существующий ключ и если нашел,складывать значения первой колонки,но в питоне как сделать двумерный list не могу разобраться,а с массивами вобще беда,я так понял, питон массив не жалует.
Как можно решить подобную задачу?

Офлайн

#2 Окт. 29, 2013 21:41:02

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Поиск дубликатов и суммирование значений по ключу

по ключу
dict же

Отредактировано bismigalis (Окт. 29, 2013 21:41:26)

Офлайн

#3 Окт. 29, 2013 22:09:09

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Поиск дубликатов и суммирование значений по ключу

mflash123
Как можно решить подобную задачу?

import csv
from collections import OrderedDict
reader = csv.reader(open('input.csv'), delimiter=' ')
count = OrderedDict()
for elem in reader:
    count[elem[1]] = count.get(elem[1], 0) + int(elem[0]) 
csv_writer = csv.writer(open('output.csv', 'w'), delimiter=' ')
for row in zip(count.values(), count.keys()):
    csv_writer.writerow(row)



Отредактировано Budulianin (Окт. 29, 2013 22:30:38)

Офлайн

#4 Окт. 30, 2013 06:18:35

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Поиск дубликатов и суммирование значений по ключу

result = {}
for line in open(file_name).read.().splitlines():
    # разделитель csv 'запятая'
    a,b = line.split(',')
    result.setdefault(b, 0)
    result[b] += int(a)
print result
# {'34234': 45, '456': 44, '9404': 1}

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version