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



我只想选择一组满足我的条件的元素(例如,属于1号菜单的元素(,并将这些元素附加到一个新的字典中。每组元素(例如1号菜单(都有起始键-'Miniwok_Stall_Menu1'和结束键-'remark:@Miniwok_stall_Menu1'
此处为词典:https://pastebin.com/viDw1snv
我目前的计划是:
1(找到满足条件的所选元素集:星期几-必须存在于要选择的菜单的第一个值e.g Mon in Monday,Tuesday...和用餐时间-备注键中的值必须与time_of_main、e.g 'None'相同
2(使用枚举来获取所选元素集合的开始和结束索引。#e.g(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(如何获取所选元素集的结束键的索引?(这是注释键的索引(一个集合的元素可能比另一个集合多,因此无法硬编码。已在selected_starts中找到启动键。我正在寻找(starting key of menu2, ending key of menu2, starting key of menu3, ending key of menu3)
2(如何获得包含"备注"的密钥的索引,用于验证第二个条件time_of_meal?
if raw_list_stall_info[remark_key_index] == time_of_meal:

您可以将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'}]

查找time_of_meal位置:

location = {i: k for i, k in enumerate(raw_list_stallinfo.values()) if k == time_of_meal}
print(location)

其给出的位置为:

{4: 'None', 9: 'None'}

然后,要在没有硬编码的情况下找到remark,您可以将其与上面的位置结合起来:

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'}

最新更新