【问题标题】:Access Elements in a Python List of Dictionaries访问 Python 字典列表中的元素
【发布时间】:2016-12-13 20:16:35
【问题描述】:

我正在使用结构如下所示的字典。它是一个包含两个键的字典,其中一个字典列表作为键 Images 的值。我可以返回我要搜索的所有数据

ImageDict['Images']

我想创建一个包含所有 ImageId 值的列表,但考虑到嵌套结构,我不确定如何去做。

{'Images': [{'Architecture': 'x86_64',
   'BlockDeviceMappings': [{'DeviceName': '/dev/sda1',
     'Ebs': {'DeleteOnTermination': True,
      'Encrypted': False,
      'SnapshotId': 'snap-635c1b80',
      'VolumeSize': 80,
      'VolumeType': 'gp2'}}],
   'CreationDate': '2016-07-05T18:31:48.000Z',
   'Description': 'tableau dw',
   'Hypervisor': 'xen',
   'ImageId': 'ami-0234bd15',
   'ImageLocation': '15664665456/My-AMI',
   'ImageType': 'machine',
   'Name': 'My-AMI',
   'OwnerId': '15664665456',
   'Platform': 'linux',
   'Public': False,
   'RootDeviceName': '/dev/sda1',
   'RootDeviceType': 'ebs',
   'SriovNetSupport': 'simple',
   'State': 'available',
   'VirtualizationType': 'hvm'},
  {'Architecture': 'x86_64',
   'BlockDeviceMappings': [{'DeviceName': '/dev/sda1',
     'Ebs': {'DeleteOnTermination': True,
      'Encrypted': False,
      'SnapshotId': 'snap-551337ca',
      'VolumeSize': 30,
      'VolumeType': 'gp2'}},
    {'DeviceName': 'xvdca', 'VirtualName': 'ephemeral0'},
    {'DeviceName': 'xvdf',
     'Ebs': {'DeleteOnTermination': False,
      'Encrypted': False,
      'SnapshotId': 'snap-60116dd7',
      'VolumeSize': 300,
      'VolumeType': 'gp2'}}],
   'CreationDate': '2016-11-18T20:16:12.000Z',
   'Description': '',
   'Hypervisor': 'xen',
   'ImageId': 'ami-0aa4911d',
   'ImageLocation': '81643435666912741/cm-test',
   'ImageType': 'machine',
   'Name': 'cm-test',
   'OwnerId': '8164228989741',
   'Platform': 'windows',
   'Public': False,
   'RootDeviceName': '/dev/sda1',
   'RootDeviceType': 'ebs',
   'SriovNetSupport': 'simple',
   'State': 'available',
   'VirtualizationType': 'hvm'}]

【问题讨论】:

    标签: python list dictionary nested


    【解决方案1】:

    您可以通过列表理解来做到这一点:

    image_ids = [d.get('ImageId') for d in ImageDict['Images']]
    

    如果您确定每个dict 都有一个ImageId,那么使用d['ImageId'] 而不是d.get('ImageId') 会更有效。

    【讨论】:

    • 谢谢您,先生。如果我想要每个项目有多个键,比如 CreationDate 和 ImageId,我会创建一个集合吗?我也不确定如何同时拉两个键?我试过 [d['ImageId']['CreationDate']
    • @RagePwn [(d['ImageId'], d['CreationDate']) for d in ImageDict['Images']] 会创建一个像 [('ami-0234bd15', '2016-07-05T18:31:48.000Z'), ...etc...] 这样的元组列表。
    猜你喜欢
    • 2019-02-13
    • 2023-04-06
    • 2015-07-05
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2022-10-04
    相关资源
    最近更新 更多