У меня есть список, который нужно группировать каждый раз, когда возникает повторяющееся значение, причем повторяющееся значение является заголовком таблицы.
В настоящее время я пытаюсь решить эту проблему с помощью серии циклов for и Я думаю, что это, вероятно, простое перечисление + zip где-то.
items = [
{
"0": 'name',
"1": 'phone',
"2": 'email'
},
{
"0": "John",
"1": "8888888888",
"2": "email@email.com"
},
{
"0": "James",
"1": "7777777777",
"2": "email@email.com"
},
{
"0": 'name',
"1": 'phone',
"2": 'email'
},
{
"0": "Jim",
"1": "8888888888",
"2": "email@email.com"
},
{
"0": "Joe",
"1": "7777777777",
"2": "email@email.com"
},
]
Обратите внимание, что элементы 0 и 3 являются «заголовками» и одинаковы. Мне нужно сгруппировать контакты в новый объект. Группы состоят из данных между каждым заголовком. это будет выглядеть так:
new_items = [
{
"group_one": [
{
"0": 'name',
"1": 'phone',
"2": 'email'
},
{
"0": "John",
"1": "8888888888",
"2": "email@email.com"
},
{
"0": "James",
"1": "7777777777",
"2": "email@email.com"
},
]
},
{
"group_two": [
{
"0": 'name',
"1": 'phone',
"2": 'email'
},
{
"0": "Jim",
"1": "8888888888",
"2": "email@email.com"
},
{
"0": "Joe",
"1": "7777777777",
"2": "email@email.com"
},
]
}
]
Затем каждый элемент после заголовка в этих новых списках необходимо объединить. Что-то вроде:
combined_items = [
{
"group_one":
{
'name': 'John/James',
'phone': '8888888888/7777777777',
'email': 'email@email.com/email@email.com'
}
},
{
"group_two":
{
'name': 'Jim/Joe',
'phone': '8888888888/7777777777',
'email': 'email@email.com/email@email.com'
}
}
]
Сейчас я делаю это:
cleaned_dictionaries = []
for row in items:
if isinstance(row, dict):
if row.get('0', None) != 'name':
cleaned_dictionaries.append(row)
header_values = items[0].values()
rows = [dict(zip(header_values, d.values())) for d in cleaned_dictionaries]
Это первый объект в качестве заголовка, а затем итерация по остальной части списка, построение списка словари и пропуск любого объекта в списке, который содержит заголовки.
Проблема в том, что я не могу объединить свои группы.