簡體   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