Python 如何使用索引根据键和值将字典拆分为多个字典?

Python 如何使用索引根据键和值将字典拆分为多个字典?,python,dictionary,Python,Dictionary,我只想选择一组符合我的条件的元素(例如,属于菜单1的元素),并将这些元素附加到一个新字典中。每套元素(例如,或1号菜单)都有开始键-'Miniwok\u Stall\u Menu1'和结束键-'备注:@Miniwok\u Stall\u Menu1' 字典在这里: 我目前的计划是: 1) 查找提供条件的选定元素集:星期几-必须存在于要选择的菜单的第一个值中例如星期一的星期一、星期二的星期一…和用餐时间-备注键中的值必须与用餐时间相同,例如“无” 2) 使用enumerate获取所选元素集的开始索

我只想选择一组符合我的条件的元素(例如,属于菜单1的元素),并将这些元素附加到一个新字典中。每套元素(例如,或1号菜单)都有开始键-
'Miniwok\u Stall\u Menu1'
和结束键-
'备注:@Miniwok\u Stall\u Menu1'

字典在这里:
我目前的计划是:
1) 查找提供条件的选定元素集:星期几-必须存在于要选择的菜单的第一个值中
例如星期一的星期一、星期二的星期一…
和用餐时间-备注键中的值必须与用餐时间相同,
例如“无”

2) 使用enumerate获取所选元素集的开始索引和结束索引<代码>#例如(0,4,5,9)
3) 使用for循环,根据索引创建一个新字典。(仅包含选定的元素集)
4) 预期输出是一个与原始格式完全相同的字典,但只包含选定的元素集

#raw_list_stallinfo is assigned to the dictionary in pastebin.
selected_stalls = []
Day_of_week = 'Mon'
time_of_meal = 'None' #None is inclusive of breakfast,lunch and dinner

for raw_list_idx, raw_list_key in enumerate(raw_list_stallinfo.keys()):
    #select the menu number based on day of week
    if Day_of_week in raw_list_stallinfo[raw_list_key]:

        #day_of_week is always found in the first index of a set of elements
        selected_stalls.append(raw_list_idx)



print(selected_stalls)
问题:
1) 如何获取所选元素集的结束键的索引?(这是备注键的索引)一个集合可以比另一个集合包含更多的元素,因此无法硬编码。已在选定的_暂停中找到启动键。我正在寻找
(menu2的开始键、menu2的结束键、menu3的开始键、menu3的结束键)

2) 如何获取包含“备注”的键的索引,用于验证第二个条件
用餐时间?


如果原始列表\u暂停\u信息[备注\u键\u索引]==用餐时间:

您可以将
用于词典理解中的
循环:

selected_stalls = []
Day_of_week = 'Mon'
time_of_meal = 'None'

raw_list_stallinfo = {'MiniWok_Stall_Menu1': 'Monday_Tuesday@Wednesday', 'Item1: Seafood HorFun@MiniWok_Stall_Menu1': '$4.50', 'Item2: Fish HorFun@MiniWok_Stall_Menu1': '$3.50', 'Item3: Chicken Horfun@MiniWok_Stall_Menu1': '$3.50', 'remark:@MiniWok_Stall_Menu1': 'None', 'MiniWok_Stall_Menu2': 'Thursday_Friday@Sunday', 'Item1: Seafood Fried Rice@MiniWok_Stall_Menu2': '$4.50', 'Item2: Salted Fish Fried Rice@MiniWok_Stall_Menu2': '$3.50', 'Item3: Chicken Fried Rice@menu2': '$3.50', 'remark:@MiniWok_Stall_Menu2': 'None', 'MiniWok_Stall_Menu3': 'Monday_Tuesday_Wednesday_Thursday_Friday@Sunday', 'Item1: Chicken Porridge@MiniWok_Stall_Menu3': '$3.00', 'Item2: Century-egg porridge@MiniWok_Stall_Menu3': '$4.00', 'remark:@MiniWok_Stall_Menu3': 'Breakfast Only'}

raw_list = {raw_list_idx: raw_list_key  for raw_list_idx, raw_list_key in enumerate(raw_list_stallinfo.keys()) if Day_of_week in raw_list_stallinfo[raw_list_key]}
selected_stalls.append(raw_list)
print(selected_stalls)
这将提供以下输出:

[{0: 'MiniWok_Stall_Menu1', 10: 'MiniWok_Stall_Menu3'}]
要查找用餐时间地点,请执行以下操作:

location = {i: k for i, k in enumerate(raw_list_stallinfo.values()) if k == time_of_meal}
print(location)
其中给出了以下位置:

{4: 'None', 9: 'None'}
然后,要查找无硬编码的
备注
,您可以将其与上面的位置结合起来:

remark_location = {i: k for i, k in raw_list_stallinfo.items() if k == time_of_meal}
print(remark_location)
返回完整的键和值:

{'remark:@MiniWok_Stall_Menu1': 'None', 'remark:@MiniWok_Stall_Menu2': 'None'}

您可以将
for
循环放入字典理解:

selected_stalls = []
Day_of_week = 'Mon'
time_of_meal = 'None'

raw_list_stallinfo = {'MiniWok_Stall_Menu1': 'Monday_Tuesday@Wednesday', 'Item1: Seafood HorFun@MiniWok_Stall_Menu1': '$4.50', 'Item2: Fish HorFun@MiniWok_Stall_Menu1': '$3.50', 'Item3: Chicken Horfun@MiniWok_Stall_Menu1': '$3.50', 'remark:@MiniWok_Stall_Menu1': 'None', 'MiniWok_Stall_Menu2': 'Thursday_Friday@Sunday', 'Item1: Seafood Fried Rice@MiniWok_Stall_Menu2': '$4.50', 'Item2: Salted Fish Fried Rice@MiniWok_Stall_Menu2': '$3.50', 'Item3: Chicken Fried Rice@menu2': '$3.50', 'remark:@MiniWok_Stall_Menu2': 'None', 'MiniWok_Stall_Menu3': 'Monday_Tuesday_Wednesday_Thursday_Friday@Sunday', 'Item1: Chicken Porridge@MiniWok_Stall_Menu3': '$3.00', 'Item2: Century-egg porridge@MiniWok_Stall_Menu3': '$4.00', 'remark:@MiniWok_Stall_Menu3': 'Breakfast Only'}

raw_list = {raw_list_idx: raw_list_key  for raw_list_idx, raw_list_key in enumerate(raw_list_stallinfo.keys()) if Day_of_week in raw_list_stallinfo[raw_list_key]}
selected_stalls.append(raw_list)
print(selected_stalls)
这将提供以下输出:

[{0: 'MiniWok_Stall_Menu1', 10: 'MiniWok_Stall_Menu3'}]
要查找用餐时间地点,请执行以下操作:

location = {i: k for i, k in enumerate(raw_list_stallinfo.values()) if k == time_of_meal}
print(location)
其中给出了以下位置:

{4: 'None', 9: 'None'}
然后,要查找无硬编码的
备注
,您可以将其与上面的位置结合起来:

remark_location = {i: k for i, k in raw_list_stallinfo.items() if k == time_of_meal}
print(remark_location)
返回完整的键和值:

{'remark:@MiniWok_Stall_Menu1': 'None', 'remark:@MiniWok_Stall_Menu2': 'None'}