Как динамически генерировать массив словарей в Python? - PullRequest
0 голосов
/ 26 августа 2018

Я использую boto3 API для автоматического добавления разделов в таблицу склеивания. Для создания одного отдельного раздела я могу использовать API create_partition, который требует от меня указать один словарь, как показано ниже.

PartitionInput = {
                        'Values': [
                            '2018', '08', '25', '06'
                        ],
                        'StorageDescriptor': {
                            'Location': 'some_location/2018/08/25/06',
                            'InputFormat': 'input_format',
                            'OutputFormat': 'output_format',
                            'SerdeInfo': 'serde_info'
                        }
                    }

Теперь я хочу использовать API batch_create_partition, где мне нужно указать массив вышеупомянутых dict для создания нескольких разделов вместе. Таким образом, если пользователь вводит 25 августа 2018 года (дата начала) и 3 в качестве количества разделов, то мой массив должен содержать 3 значения, где каждое значение является указанным выше, но которое изменяет значения и местоположение. Таким образом, вывод будет -

PartitionInput = [{
    'Values': [
      '2018', '08', '25', '00'
    ],
    'StorageDescriptor': {
      'Location': 'some_location/2018/08/25/06',
      'InputFormat': 'input_format',
      'OutputFormat': 'output_format',
      'SerdeInfo': 'serde_info'
    }
  },
  {
    'Values': [
      '2018', '08', '25', '01'
    ],
    'StorageDescriptor': {
      'Location': 'some_location/2018/08/25/06',
      'InputFormat': 'input_format',
      'OutputFormat': 'output_format',
      'SerdeInfo': 'serde_info'
    }
  }, {
    'Values': [
      '2018', '08', '25', '03'
    ],
    'StorageDescriptor': {
      'Location': 'some_location/2018/08/25/06',
      'InputFormat': 'input_format',
      'OutputFormat': 'output_format',
      'SerdeInfo': 'serde_info'
    }
  }
]

Я новичок в Python, а также в программировании, поэтому я не уверен, как это сделать.

1 Ответ

0 голосов
/ 26 августа 2018

Я смог решить вышеуказанную проблему, используя следующий код -

for x in range(24):
    year = 2018
    month = 02
    day = 25
    hour = x
    part_loc = "some_location/{}/{}/{}/{}".format(year, month, day, hour)
    input_dict = {
        'Values': [
            str(year), str(month), str(day), str(hour)
        ],
        'StorageDescriptor': {
            'Location': part_loc,
            'InputFormat': 'input_format',
            'OutputFormat': 'output_format',
            'SerdeInfo': 'serde_info'
        }
    }

    input_list.append(input_dict.copy())

print input_list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...