Как удалить лишние квадратные скобки из вложенного списка внутри словаря?

#python #list #dictionary #square-bracket

#python #Список #словарь #square-bracket

Вопрос:

Я работал над проблемой, которая включает в себя сортировку большого набора данных заказов в магазине, извлечение информации о магазине и пользователе на основе некоторых параметров. В основном это включало создание словарей путем перебора набора данных с помощью цикла for и добавления нового списка, вот так:

 sshop = defaultdict(list)
for i in range(df_subset.shape[0]):
    orderid, sid, userid, time = df.iloc[i]
    sshop[sid].append(userid)
sData = dict(sshop)


#CREATES DICTIONARY OF UNIQUE SHOPS WITH USER DATA AS THE VALUE
shops = df_subset['shopid'].unique()
shops_dict = defaultdict(list)
for shop in shops: 
    shops_dict[shop].append(sData[shop])
shops_dict = dict(shops_dict)
  

shops_dict на данный момент выглядит следующим образом:

 {10009: [[196962305]], 10051: [[2854032, 48600461]], 10061: [[168750452, 194819216, 130633421, 
 62464559]]}
  

Чтобы перейти к финальным этапам, мне пришлось пару раз повторить строки кода, похожие на эти. Кажется, что каждый раз, когда я это делаю, происходит то, что значения в словарях приобретают набор квадратных скобок.

Это один из моих последних словарей:

 {10159: [[[1577562540.0, 1577736960.0, 1577737080.0]], [[1577651880.0, 1577652000.0, 1577652960.0]]], 
 10208: [[[1577651040.0, 1577651580.0, 1577797080.0]]]}
  

Я не совсем понимаю, почему это происходит, кроме того, я полагаю, что это как-то связано с использованием defaultdict(список) и последующим преобразованием этого в словарь с помощью dict().
Эти дополнительные скобки, помимо того, что они немного сбивают с толку, по-видимому, вызывают некоторые проблемы при доступе к данным с использованием определенных функций. Я понимаю, что всего должно быть два набора квадратных скобок, один набор, который заключает в себя все значения в ключе словаря, а другой внутри него для каждого из конкретных наборов значений в этом ключе.

Мой первый вопрос был бы таким: возможно ли удалить определенный набор квадратных скобок из такого словаря? Мой второй вопрос был бы, если нет — есть ли лучший способ создания новых словарей из данных из более старого без использования defaultdict (список) и наличия всех этих дополнительных квадратных скобок?

Любая помощь высоко ценится! Спасибо :)!

Ответ №1:

Во втором цикле используйте extend вместо append .

 for shop in shops: 
    shops_dict[shop].extend(sData[shop])
shops_dict = dict(shops_dict)