如何在Python中动态生成字典数组?

时间:2018-08-26 00:01:49

标签: python arrays python-2.7 dictionary boto3

我正在使用boto3 API自动将分区添加到粘合表中。为了创建一个分区,我可以使用create_partition api,它需要我指定一个字典,如下所示。

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

现在,我想使用batch_create_partition API,在这里我需要指定上述字典的数组来一起创建多个分区。因此,如果用户输入2018年8月25日(开始日期)和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 :(得分:0)

我能够使用下面的代码解决以上问题-

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