首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python中的dict列表中提取特定的键。前哨集线器

从python中的dict列表中提取特定的键。前哨集线器
EN

Stack Overflow用户
提问于 2018-03-25 07:10:07
回答 4查看 104关注 0票数 0

我似乎被非常简单的任务卡住了。我还在尝试Python。

我正在尝试用SentinelHub接口下载前哨2图像:SentinelHub

我的代码返回的数据结果如下:

代码语言:javascript
复制
{'geometry': {'coordinates': [[[[35.895906644, 31.602691754],
     [36.264307655, 31.593801516],
     [36.230618703, 30.604681346],
     [35.642363693, 30.617971909],
     [35.678587829, 30.757888786],
     [35.715700562, 30.905919341],
     [35.754290061, 31.053632806],
     [35.793289298, 31.206946419],
     [35.895906644, 31.602691754]]]],
  'type': 'MultiPolygon'},
 'id': 'ee923fac-0097-58a8-b861-b07d89b99310',
 'properties': {'**productType**': '**S2MSI1C**',
  'centroid': {'coordinates': [18.1321538275, 31.10368655], 'type': 'Point'},
  'cloudCover': 10.68,
  'collection': 'Sentinel2',
  'completionDate': '2017-06-07T08:15:54Z',
  'description': None,
  'instrument': 'MSI',
  'keywords': [],
  'license': {'description': {'shortName': 'No license'},
   'grantedCountries': None,
   'grantedFlags': None,
   'grantedOrganizationCountries': None,
   'hasToBeSigned': 'never',
   'licenseId': 'unlicensed',
   'signatureQuota': -1,
   'viewService': 'public'},
  'links': [{'href': 'http://opensearch.sentinel-hub.com/resto/collections/Sentinel2/ee923fac-0097-58a8-b861-b07d89b99310.json?&lang=en',
    'rel': 'self',
    'title': 'GeoJSON link for ee923fac-0097-58a8-b861-b07d89b99310',
    'type': 'application/json'}],
  'orbitNumber': 10228,
  'organisationName': None,
  'parentIdentifier': None,
  'platform': 'Sentinel-2',
  'processingLevel': '1C',
  'productIdentifier': 'S2A_OPER_MSI_L1C_TL_SGS__20170607T120016_A010228_T36RYV_N02.05',
  'published': '2017-07-26T13:09:17.405352Z',
  'quicklook': None,
  'resolution': 10,
  's3Path': 'tiles/36/R/YV/2017/6/7/0',
  's3URI': 's3://sentinel-s2-l1c/tiles/36/R/YV/2017/6/7/0/',
  'sensorMode': None,
  'services': {'download': {'mimeType': 'text/html',
    'url': 'http://sentinel-s2-l1c.s3-website.eu-central-1.amazonaws.com#tiles/36/R/YV/2017/6/7/0/'}},
  'sgsId': 2168915,
  'snowCover': 0,
  'spacecraft': 'S2A',
  'startDate': '2017-06-07T08:15:54Z',
  'thumbnail': None,
  'title': 'S2A_OPER_MSI_L1C_TL_SGS__20170607T120016_A010228_T36RYV_N02.05',
  'updated': '2017-07-26T13:09:17.405352Z'},
 'type': 'Feature'}

你能解释一下如何遍历这组数据并只提取“productType”吗?例如,如果有几个相似的数据集,它将只返回不同的产品类型。

我的代码是:

代码语言:javascript
复制
 import matplotlib.pyplot as plt
    import numpy as np
    from sentinelhub import AwsProductRequest, AwsTileRequest, AwsTile, BBox, CRS
    betsiboka_coords_wgs84 = [31.245117,33.897777,34.936523,36.129002]
    bbox = BBox(bbox=betsiboka_coords_wgs84, crs=CRS.WGS84)
    date= '2017-06-05',('2017-06-08')
    data=sentinelhub.opensearch.get_area_info(bbox, date_interval=date, maxcc=None)
for i in data:
    print(i)
EN

回答 4

Stack Overflow用户

发布于 2018-03-25 07:31:27

根据您提供的内容,替换您的底部for循环:

代码语言:javascript
复制
for i in data:
  print(i)

具有以下功能:

代码语言:javascript
复制
for i in data:
  print(i['properties']['**productType**'])
票数 0
EN

Stack Overflow用户

发布于 2018-03-25 07:34:41

如果只想访问propertyType,可以在for循环中使用i['properties']['productType']。如果你想随时访问它,而不是每次都写那些键,你可以像这样定义一个生成器:

代码语言:javascript
复制
def property_types(data_array):
    for data in data_array
        yield data['properties']['propertyType']

所以你可以像这样在循环中使用它(你的data_array就是数据,正如sentinelhub api所返回的那样):

代码语言:javascript
复制
for property_type in property_types(data):
    # do stuff with property_type
票数 0
EN

Stack Overflow用户

发布于 2018-03-25 08:05:41

代码语言:javascript
复制
keys = []  
for key in d.keys():
     if key == 'properties':
         for k in d[key].keys():
            if k == '**productType**' and k not in keys:         
            keys.append(d[key][k])
print(keys)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49470915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档