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

Я работал над проблемой, которая включает в себя сортировку большого набора данных о заказах в магазине, извлечение информации о магазине и пользователе на основе некоторых параметров. В основном это включало создание словарей путем итерации набора данных с помощью цикла 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)

shop_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(list) и последующим преобразованием его в словарь с помощью dict(). Эти дополнительные скобки, помимо того, что они немного сбивают с толку, по-видимому, вызывают некоторые проблемы с доступом к данным с помощью определенных функций. Я понимаю, что всего должно быть два набора квадратных скобок, один набор, который заключает в себе все значения в ключе словаря, а другой внутри него для каждого из конкретных наборов значений в этом ключе.

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

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


person Patrick Singer    schedule 24.08.2020    source источник


Ответы (1)


Во втором цикле используйте расширение вместо добавления.

for shop in shops: 
    shops_dict[shop].extend(sData[shop])
shops_dict = dict(shops_dict)
person Md Zafar Hassan    schedule 24.08.2020