【发布时间】:2021-09-22 18:35:10
【问题描述】:
我正在创建一个随机膳食生成器。这个想法是它从字典中随机选择餐点,并应用一周中的哪一天来吃那顿饭。它只会挑选一周的食物,因此只会选择 7 种食谱。到目前为止,这是我的代码:
meals = {'Recipe': ['Chicken Kebab', 'Chicken Balti', 'Chicken Stir Fry', 'Chicken Curry', 'Cola Chicken', 'Chicken Fajita Pie',
'Chicken in Black Bean Sauce', 'Stuffed Meatballs', 'Pesto Pasta'],
'Book': ['1', '1', '1', '1', '1', '1', '1', '1', '1'],
'Page': ['48', '50', '52', '58', '72', '74', '80', '87', '108'],
'Category': ['Normal', 'Curry', 'Asian', 'Curry', 'Normal', 'Normal', 'Asian', 'Pasta', 'Pasta'],
'Vegetarian': ['No', 'No', 'No', 'No', 'No', 'No', 'No', 'No', 'Yes']}
df = pd.DataFrame(meals)
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
print (df)
mealdays = []
while len(meals['Recipe']) != len(days):
days.append(" ")
while len(meals['Recipe']) != len(mealdays):
day = random.choice(days)
mealdays.append(day)
days.remove(day)
random.shuffle(days)
df['Days'] = mealdays
print (df)
这非常适合随机选择餐点,但我现在要做的是引入一些规则,以便不会多次选择某些“类别”。例如,如果已为“星期一”随机选择了“咖喱”类别食谱,那么我不希望在本周剩下的时间里使用另一个“咖喱”类别食谱。我假设这将是第二个 While 循环中的 If 语句,但我不确定它会是什么。
【问题讨论】:
-
如果
meals是字典列表而不是列表字典,事情会容易得多。 -
但是你只有4个分类,有7天。
-
当您选择食谱时,将其类别放入列表中。然后在选择下一个食谱时,循环直到你得到一个不在同一类别中的食谱。
-
这与有多少类别无关,数据框中有超过 7 行,我希望星期几成为一个新列,其中包含星期几,其他人将保持空白
标签: python pandas list dictionary while-loop