繁体   English   中英

如何从python字典中提取列表中的项目

[英]How do I extract items which are in a list from python dictionary

我对 python 很陌生,我正在努力解决这个特定的问题。

我有以下脚本:

landmask_regions = 
   'Africa': ['mask_M01.map', 'mask_M02.map', 'mask_M03.map', \
        'mask_M05.map', 'mask_M06.map', 'mask_M07.map', 'mask_M08.map', \
        'mask_M09.map'], \
   'Asia': ['mask_M04.map', 'mask_M05.map', 'mask_M10.map', 'mask_M11.map', \
        'mask_M12.map', 'mask_M13.map', 'mask_M14.map', 'mask_M15.map', \
        'mask_M16.map', 'mask_M17.map', 'mask_M18.map', 'mask_M19.map', \
        'mask_M20.map', 'mask_M21.map', 'mask_M22.map', 'mask_M23.map'], \
   'Europe': ['mask_M26.map', 'mask_M28.map', 'mask_M32.map', 'mask_M33.map', \
        'mask_M34.map'], \
   'N-America': ['mask_M25.map', 'mask_M35.map', 'mask_M36.map', 'mask_M37.map', \
        'mask_M38.map', 'mask_M39.map', 'mask_M40.map', 'mask_M41.map', \
        'mask_M42.map', 'mask_M43.map', 'mask_M44.map', 'mask_M45.map', 'mask_M46.map'], \
   'Australia': ['mask_M47.map', 'mask_M48.map', 'mask_M49.map'], \
   'S-America': ['mask_M24.map', 'mask_M50.map', 'mask_M51.map', \
        'mask_M52.map', 'mask_M53.map']}

所以这个脚本是一个被划分成大洲的字典,对于每个大洲,它包括某些地区的地图。 现在我希望能够在这些场合阅读这些地图;

  1. 一起阅读全世界的所有地图
  2. 阅读一个地区的所有地图,例如“非洲”或“亚洲”等。
  3. 读取一个大陆内的一个特定区域,只说 mask_M08.map

我应该如何安排一个能够完成所有这些的脚本? 我有点坚持这一点。

只需从用户那里获取输入,然后决定要做什么。

例如,您可以接受:

  • 特殊字符串whole_world将选择所有大陆的所有地图,
  • 任何内容,例如AfricaAsiaEurope
  • 任何单独的地图,以.map结尾。

所以,在 Python 中,这看起来像:

choice = input('which maps would you like to read?')
if choice == 'whole_world':
    maps = sum(landmask_regions.values(), [])
elif choice in landmask_regions:
    maps = landmask_regions[choice]
elif choice.endswith('.map'):
    maps = [choice]
#code to read map and do whatever...

因此,当进入whole_world时, maps列表包含所有地图的名称:

['mask_M01.map', 'mask_M02.map', 'mask_M03.map', 'mask_M05.map', 'mask_M06.map', 'mask_M07.map', 'mask_M08.map', 'mask_M09.map', 'mask_M04.map', 'mask_M05.map', 'mask_M10.map', 'mask_M11.map', 'mask_M12.map', 'mask_M13.map', 'mask_M14.map', 'mask_M15.map', 'mask_M16.map', 'mask_M17.map', 'mask_M18.map', 'mask_M19.map', 'mask_M20.map', 'mask_M21.map', 'mask_M22.map', 'mask_M23.map', 'mask_M26.map', 'mask_M28.map', 'mask_M32.map', 'mask_M33.map', 'mask_M34.map', 'mask_M25.map', 'mask_M35.map', 'mask_M36.map', 'mask_M37.map', 'mask_M38.map', 'mask_M39.map', 'mask_M40.map', 'mask_M41.map', 'mask_M42.map', 'mask_M43.map', 'mask_M44.map', 'mask_M45.map', 'mask_M46.map', 'mask_M47.map', 'mask_M48.map', 'mask_M49.map', 'mask_M24.map', 'mask_M50.map', 'mask_M51.map', 'mask_M52.map', 'mask_M53.map']

当输入像Africa这样的大陆时, maps列表仅包含来自该大陆的地图:

['mask_M01.map', 'mask_M02.map', 'mask_M03.map', 'mask_M05.map', 'mask_M06.map', 'mask_M07.map', 'mask_M08.map', 'mask_M09.map']

当输入特定地图时, maps列表仅包含该地图:

['mask_M01.map']

似乎您希望方法可以相互调用以完成您概述的每项任务。 也就是说,拿你的清单:

  1. 一起阅读所有地图
  2. 阅读一个地区的所有地图。
  3. 读取一个大陆内的一个特定区域

让我们从下往上做,因为这样工作会更容易:

def read_map(mapp):
    """reads a .map file (arg is not map because map is a keyword)"""
    <map reading code>

def read_one_continent(continent, region):
     """Reads all maps for a given region"""
     print("Reading " + continent)
     for mapp in region:
         read_map(mapp)

def read_world(world):
    """reads all of the maps in the world"""
    for continent, maps in world:
        read_one_continent(continent, maps)

这样,您就有了一个读取单个地图的函数,一个读取一组地图的函数(例如一个大陆的地图列表),然后是整个地图的函数! 您也可以将它们放入一个大函数中,但这可能更具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM