Найти - Пользователи
Полная версия: Списки и словари создание на лету
Начало » Python для новичков » Списки и словари создание на лету
1
prizrak-pro
Может тема странная, но постараюсь объяснить.

Как можно такое сделать, без проверок, если это возможно на 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)
И если это в цикле, я же не могу постоянно создавать список, мне нужно проверять есть ли список или нет. Я правильно понимаю? Или есть иной способ?
JOHN_16
оформляйте код в теги code, иначе скобки съедаются и код нечитаемый. Пока что мало понятно о чем именно идет речь.
prizrak-pro
есть список полученный из базы

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={}
А вот как потом делать

Если в цикле мы перебираем список DB. Нужно что типа
u[12]['bd'].append()
Но нужно определить есть ли список
u[12]['bd']

Я ввел проверку.
if not id in u:
	u[id] = {'bd':[],'con':0}

(id получаем при переборе списка)

Правильно или есть другой подход.
py.user.next
>>> 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)]}}
>>>
pyuser
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)
prizrak-pro
Большое спасибо за ответы.
Про setdefault не знал, буду иметь в виду.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB