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

时间:2018-08-17 15:23:52

标签: python list dictionary maps

我对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

我应该如何安排一个能够完成所有这些工作的脚本? 我对此有些困惑。

2 个答案:

答案 0 :(得分:1)

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

例如,您可以接受:

  • 特殊字符串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 :(得分:0)

似乎您会需要互相调用的方法来完成您概述的每个任务。就是了,列出您的列表:

  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)

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