Вот один из возможных подходов
Словарь
myDictionary = {"ID1":[1,2,3], "ID2":[[10,11,12],[2,34,11]],"ID3":[8,3,12]}
Получить словарь d
, который содержит значения ключей для значений, которые являются вложенными списками, чьи (а) ключи уникальны - используйте суффикс, чтобы ключи этого словаря d
были уникальными и (б) чьи значения являются сплюснутыми подсписками из вложенного списка
- чтобы сделать это, переберите цикл и
- проверьте , если значение содержит подсписок
- если это так, добавьте эту пару
key:value
в отдельный словарь d
- используйте суффикс для разделения идентичных ключей, поскольку ключ
ID2
не может быть повторен в словаре
- каждый суффикс будет содержать один из подсписков из вложенного списка
- генерирует список ключей из исходного словаря (в переменной с именем
nested_keys
myDictionary
), значения которого являются вложенными списками
d = {}
nested_keys = []
for k,v in myDictionary.items():
if any(isinstance(i, list) for i in v):
for m,s in enumerate(v):
d[k+'_'+str(m+1)] = s
nested_keys.append(k)
print(d)
{'ID2_1': [10, 11, 12], 'ID2_2': [2, 34, 11]}
(Используя список ключей, значения которых являются вложенными списками - nested_keys
) Получите второй словарь, который содержит значения, которые не являются вложенными списками - см. этого SO сообщение о том, как это сделать
myDictionary = {key: myDictionary[key] for key in myDictionary if key not in nested_keys}
print(myDictionary)
{'ID1': [1, 2, 3], 'ID3': [8, 3, 12]}
Объедините 2 словаря выше в один словарь
myDictionary = {**d, **myDictionary}
print(myDictionary)
{'ID2_1': [10, 11, 12], 'ID2_2': [2, 34, 11], 'ID1': [1, 2, 3], 'ID3': [8, 3, 12]}
Преобразовать объединенный словарь в DataFrame
и отбросить суффикс, который был добавлен ранее
df = pd.DataFrame(list(myDictionary.values()), index=myDictionary.keys(),
columns=list('ABC'))
df.reset_index(inplace=True)
df = df.replace(r"_[0-9]", "", regex=True)
df.sort_values(by='index', inplace=True)
print(df)
index A B C
2 ID1 1 2 3
0 ID2 10 11 12
1 ID2 2 34 11
3 ID3 8 3 12