Форум сайта python.su
0
Добрый день. Мне нужно забрать данные из базы и потом их обработать. Первый вопрос: правильно ли я делаю выборку из MySQL? Или это рабочий, но “быдлокодерский” способ?
import MySQLdb, sys ... result = [] try: cur.execute("SELECT time, zone, num, class FROM calls001 WHERE oper = %s" % (oper)) calls = cur.fetchall() for call in calls: cur.execute("SELECT zone_name FROM zones WHERE zone_id = %s" % (calls[1])) zones = cur.fetchall() for zone in zones: result.append({'time': calls[0], 'zone_id': calls[1], 'num': calls[2], 'class': calls[3], 'name': zones[0]}) except MySQLdb.Error, e: print "Ошибка %d: %s" % (e.args[0], e.args[1]) print "Ничего не найдено"
4342: {'time': 23, 'num': 4951234565, 'class': 3, 'name': 'Moscow'}, {'time': 11, 'num': 4959829011, 'class': 2, 'name': 'Moscow'}, {'time': 120, 'num': 4997892677, 'class': 1, 'name': 'Moscow'}
67999: {'time': 5, 'num': 8469901234, 'class': 1, 'name': 'Samara'}, {'time': 19, 'num': 8469909283, 'class': 1, 'name': 'Samara'}, {'time': 349, 'num': 8469908922, 'class': 3, 'name': 'Samara'}, {'time': 4, 'num': 8469909911, 'class': 3, 'name': 'Samara'}, {'time': 15, 'num': 8469901412, 'class': 3, 'name': 'Samara'}
for i in result: grouped[i['zone_id']] = {'time': i['time'], 'num': i['num'], 'class': i['class'], 'name': i['name']}
Отредактировано foger (Дек. 5, 2014 10:10:07)
Офлайн
34
fogerВместо того чтобы делать много запросов к zones, сделайте в первом join.
Первый вопрос: правильно ли я делаю выборку из MySQL?
fogerВ itertools есть groupby, который может группировать данные по определенному признаку. Обратите внимание что список должен быть отсортирован по этому признаку.
Теперь мне нужно из него создать новый словарь сгруппированый по определенному ключу
from itertools import groupby from pprint import pprint my_data = [ {'name': 'Moscow', 'value': 1}, {'name': 'Kiev', 'value': 3}, {'name': 'Moscow', 'value': 2}, {'name': 'Minsk', 'value': 4}, {'name': 'Kiev', 'value': 5}, {'name': 'Moscow', 'value': 6}, ] sorted_data = sorted(my_data, key=lambda x: x['name']) my_grouped_data = {} # my_grouped_data = dict((name, list(items)) for (name, items) in groupby(sorted_data, lambda x: x['name'])) for name, items in groupby(sorted_data, lambda x: x['name']): my_grouped_data[name] = list(items) pprint(my_grouped_data)
{'Kiev': [{'name': 'Kiev', 'value': 3}, {'name': 'Kiev', 'value': 5}],
'Minsk': [{'name': 'Minsk', 'value': 4}],
'Moscow': [{'name': 'Moscow', 'value': 1},
{'name': 'Moscow', 'value': 2},
{'name': 'Moscow', 'value': 6}]}Отредактировано GreyZmeem (Дек. 5, 2014 16:52:22)
Офлайн
0
GreyZmeemСпасибо большое за помощь! Все так как мне и нужно было!
Офлайн