Задать вопрос
@zevem
Стрелец

Как собрать массив по id в питоне?

Есть такая таблица
id --product_id --- name
1 ---- 65 ---- name1
2 ---- 65 ---- name2
3 ---- 65 ---- name3
4 ---- 66 ---- name4
5 ---- 66 ---- name5

Нужно получить вот это в питоне
Array
(
    [65] => Array
        (
            [0] => Array ([name] => name1)
            [1] => Array ([name] => name2)
            [2] => Array ([name] => name3)
         )
    [66] => Array
        (
            [0] => Array ([name] => name4)
            [1] => Array ([name] => name5)
         )


В php это выглядело бы так:

$products = $mysqli->query("SELECT * FROM table_name");

$pr = array();

foreach($products as $product) {
$pr[$product['product_id']][] = array(
"name" => $product['name']
);
}

print_r($pr);


А как это сделать в питоне?

Пока остановился на этом:

dbcursor.execute("SELECT *  FROM table_name")
results = dbcursor.fetchall()

products = {}

for result in results:
	products[result[1]] = result


Дальше пробую работать с тем, что получилось

for product in products:
print(product)

//65
//66

Выдает id товара и все
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
Viktor_T2
@Viktor_T2
python developer
В пайтоне аналогом этого будет словарь списков:
results = cur.fetchall()

result = {} # результирующий словарь

for row in results:
    
    product_id = row[1]
    name = row[2]
        
    pred_list = result.get(product_id)   # получаем из результата список имен
                                         # относящихся к данному product_id
                                       
    if not pred_list:                    # если в результате списка еще нет
        pred_list = [name]               # создаем список
    else:                                # если список есть
        pred_list.append(name)           # добавляем имя в список
    
    result.update({product_id:pred_list}) # обновляем результирующий словарь 
    
print(result)
print(result[65])
print(result[65][1])
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы