簡體   English   中英

使用鍵子集創建字典列表的副本

[英]Creating a copy of a list of dictionaries with a subset of keys

在 python 中,我有一個字典列表,它們都具有相同的鍵,如下所示:

[
    {'restaurant': ...,
      'lunch_menu': ...,
      'dinner_menu': ...,
    },
    {'restaurant': ...,
      'lunch_menu': ...,
      'dinner_menu': ...,
    },
    {'restaurant': ...,
      'lunch_menu': ...,
      'dinner_menu': ...,
    },
    ...
]

我想將其拆分為兩個不同的字典列表,如下所示:

[
    {'restaurant': ...,
      'lunch_menu': ...,
    },
    {'restaurant': ...,
      'lunch_menu': ...,
    },
    {'restaurant': ...,
      'lunch_menu': ...,
    },
    ...
]

[
    {'restaurant': ...,
      'dinner_menu': ...,
    },
    {'restaurant': ...,
      'dinner_menu': ...,
    },
    {'restaurant': ...,
      'dinner_menu': ...,
    },
    ...
]

實現這一目標的最佳方法是什么? 我想我可以復制主列表兩次並遍歷每個副本,在我不想要的鍵上運行pop() 但我想知道是否有更優雅/pythonic 的方式來實現這一點。

用於兩個示例的初始數據:

lst = [{'restaurant':'one_rest', 'lunch_menu':'one_lunch', 'dinner_menu':'one_din'},
       {'restaurant':'two_rest', 'lunch_menu':'two_lunch', 'dinner_menu':'two_din'}]

一個清晰但非 Pythonic 的方法:

one = []
two = []
for dic in lst:
    one.append({'restaurant' : dic['restaurant'],
                'lunch_menu' : dic['lunch_menu']})
    two.append({'restaurant' : dic['restaurant'],
                'dinner_menu' : dic['dinner_menu']})

更多Pythonic:

one = [{k: dic[k] for k in ('restaurant', 'lunch_menu')} for dic in lst]
two = [{k: dic[k] for k in ('restaurant', 'dinner_menu')} for dic in lst]

只需遍歷您的 dict 並提取所需的 subdict。

對於 Python 2.7 或更高版本:

x = [
    {'restaurant': 1,
     'lunch_menu': 1,
     'dinner_menu': 1,
     },
    {'restaurant': 2,
     'lunch_menu': 2,
     'dinner_menu': 2,
     },
    {'restaurant': 3,
     'lunch_menu': 3,
     'dinner_menu': 3,
     },

]

print [{k: el[k] for k in ('restaurant', 'lunch_menu')} for el in x]
>>> [{'lunch_menu': 1, 'restaurant': 1}, {'lunch_menu': 2, 'restaurant': 2}, {'lunch_menu': 3, 'restaurant': 3}]

除此以外:

print [{k: el[k] for k in ('restaurant', 'lunch_menu')} for el in x]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM