Форум сайта python.su
0
Доброе время. Есть файл summ_stolb.txt вида:
10 - ivan
20 - petr
20 - ivan
30 - petr
хочется на основании этого файла получить словарь, где второй столбец- это ключи, а первый столбец надо сложить, если ключи совпадают. т.е. на выходе надо получить словарь в данном случае такой:
{“ivan”: 30, “petr”:50}
пока удалось написать вот это:
import os, sys f = open("d:/summ_stolb.txt", "r") b=f.readlines() D={} for i in b: a=i.split(" - ") if a[1] in D.keys(): D[a[1]]= 10+int(a[0]) else: D[a[1]]=a[0] #D[a[1]]=a[0] print(a[1], a[0]) print(list(D.items())) f.close()
D[a[1]]= 10+int(a[0])
Офлайн
186
Надо как-то так:
if a[1] in D.keys(): D[a[1]] += int(a[0]) else: D[a[1]] = int(a[0])
Отредактировано Rodegast (Июль 11, 2016 15:40:20)
Офлайн
103
from collections import defaultdict d = defaultdict(int) with open("d:/summ_stolb.txt") as f: for l in f: v, k = l.split(' - ') d[k] += int(v)
d = {} with open("d:/summ_stolb.txt") as f: for l in f: v, k = l.split(' - ') d[k] = d,get(k, 0) + int(v)
Офлайн
0
Rodegast
Надо как-то так:
ivan 10 petr 20 Traceback (most recent call last): File "C:/Documents and Settings/userYandexDisk/test/summ_nashe.py", line 9, in <module> D[a[1]]+=int(a[0]) TypeError: Can't convert 'int' object to str implicitly
terabaytа так - работает. Спасибо!
d = d,get(k, 0) + int(v)
Отредактировано P_N (Июль 11, 2016 15:46:25)
Офлайн
186
> так не работает
У меня всё работает.
>>> D = {} >>> def test(k, v): ... if k in D: ... D[k] += int(v) ... else: ... D[k] = int(v) >>> D {} >>> test("ivan", 10) >>> test("petr", 20) >>> test("ivan", 20) >>> test("petr", 30) >>> D {'ivan': 30, 'petr': 50}
Офлайн
88
Лежало в закромах без дела
def group_and_sum(data, grp_indexes, val_indexes): from collections import OrderedDict grouped = OrderedDict() for row in data: holder = grouped.setdefault(tuple(row[i] for i in grp_indexes), OrderedDict()) for val in val_indexes: holder[val] = holder.get(val, 0) + row[val] return grouped data = [{'val': 10, 'name': 'ivan'}, {'val': 20, 'name': 'petr'}, {'val': 20, 'name': 'ivan'}, {'val': 30, 'name': 'petr'}] print(group_and_sum(data, ['name'], ['val'])) data = [(10, 'ivan'), (20, 'petr'), (20, 'ivan'), (30, 'petr')] print(group_and_sum(data, [1], [0]))
Офлайн
73
D = {} with open('summ_stolb.txt') as file: for val,key in (i.strip().split('-') for i in file.readlines()): if key in D: D[key] += int(val) else: D[key] = int(val) print(D)
>>> {' petr': 50, ' ivan': 30}
Отредактировано marvellik (Июль 11, 2016 19:47:48)
Офлайн