Массив словарей

FROgin

Новичок
Пользователь
Мар 25, 2025
1
1
1
Народ, подскажите, пожалуйста, как создать массив словарей. То есть у меня есть файл лога, и я пытаюсь его распарсить таким образом:
Код:
 ['host_list':  {host': 'host', 'value': value1}
{host': 'host', 'value': value2}
{host': 'host', 'value': value3}.......]
А получается:
Код:
 ['host_list':  {host': 'host', 'value': value1}]
['host_list':  {host': 'host', 'value': value2}]
['host_list':  {host': 'host', 'value': value3}]
Вот сама строка
hosts=host1/15+host1/7+host1/6+host1/5
Разбиваю
Код:
 hosts{}
for j in data['hosts'].split('+'):
              host,value = j.split('/')
              data['host'] = host
              data['value'] = int(value)
              hosts['job_list'] = [{'host': host, 'value': value}]
где data уже, собственно, массив из набора хостов для каждого пользователя
 
  • Мне нравится
Реакции: Dr. Mundo

Dr. Mundo

Модератор
Команда форума
Модератор
Фев 13, 2024
29
1
3
В вашем коде вы каждый раз перезаписываете список hosts['job_list'] новым списком, содержащим только один словарь, вместо того чтобы добавлять новые словари в существующий список. Вот как можно исправить ваш код:

Python:
# Инициализируем список перед циклом
hosts = {}
hosts['job_list'] = []

for j in data['hosts'].split('+'):
    host, value = j.split('/')
    data['host'] = host
    data['value'] = int(value)
    # Добавляем новый словарь в существующий список
    hosts['job_list'].append({'host': host, 'value': int(value)})

В этом исправленном коде мы:
  1. Создаем пустой список перед циклом
  2. Используем метод .append() для добавления нового словаря в список
  3. Преобразуем значение в целое число прямо здесь, чтобы избежать потенциальных проблем с типами
Обратите внимание, что я также исправил имя ключа в исходном коде. В вашем примере вы используете 'host_list', но в коде - 'job_list'. Выберите один вариант для последовательности.
 

Форум IT Специалистов