Форум сайта python.su
0
Может тема странная, но постараюсь объяснить.
Как можно такое сделать, без проверок, если это возможно на python.
Приведу пример на PHP.
Например нам нужно составить вложенный ассоциативный массив.
$id_p = ‘r’
$raa=1
$raa=2
$id_p = ‘s’
$raa=1
В итоге получим массив.
raa=1
raa=2
raa=1
Как так же, на ходу создать список в Python.
Просто получается его нужно объявить.
raa={}
id_p = ‘r’
raa
И далее мне нужно создать список.
raa=
А потом делать raa.append(1)
raa.append(2)
И если это в цикле, я же не могу постоянно создавать список, мне нужно проверять есть ли список или нет. Я правильно понимаю? Или есть иной способ?
Офлайн
221
оформляйте код в теги code, иначе скобки съедаются и код нечитаемый. Пока что мало понятно о чем именно идет речь.
Офлайн
0
есть список полученный из базы
BD = [(12,'text',1),(13,'text',0),(12,'text',2),(13,'text1',1),(14,'text1',2)]
u[12]['bd']=[(12,'text',1),(12,'text',2)] u[12]['con']=3 u[13]['bd']=[(13,'text',0),(13,'text',1)] u[13]['con']=1 u[14]['bd']=[(14,'text',1)] u[13]['con']=2
u={}
u[12]['bd'].append()
u[12]['bd']
if not id in u: u[id] = {'bd':[],'con':0}
Офлайн
857
>>> def f(seq): ... d = {} ... for i in seq: ... n = i[0] ... if n not in d: ... d[n] = {'db': [], 'con': 0} ... d[n]['db'].append(i) ... d[n]['con'] = 1 ... return d ... >>> lst = [(12, 'text', 1), ... (13, 'text', 0), ... (12, 'text', 2), ... (13, 'text1', 1), ... (14, 'text1', 2)] >>> >>> f(lst) {12: {'con': 1, 'db': [(12, 'text', 1), (12, 'text', 2)]}, 13: {'con': 1, 'db': [(13, 'text', 0), (13, 'text1', 1)]}, 14: {'con': 1, 'db': [(14, 'text1', 2)]}} >>>
Офлайн
36
BD = [(12,'text',1),(13,'text',0),(12,'text',2),(13,'text1',1),(14,'text1',2)] result = {} for rec in BD: r = result.setdefault(rec[0], {'db': [], 'con': 0}) r['db'].append(rec) r['con'] += rec[2] print(result)
Отредактировано pyuser (Март 4, 2015 06:13:45)
Офлайн
0
Большое спасибо за ответы.
Про setdefault не знал, буду иметь в виду.
Офлайн