以下是我必须做的事情,我们有很多不同的业务。 从星期一到星期五,每个都会在不同的日子打开和关闭。 一些从星期二到星期五,有些星期一 - 星期五从8-12到14-18。
例如:
hours = {
'monday_c': '18:00',
'saturday_c': None,
'monday2_c': None,
'thursday2': None,
'thursday': '09:00',
'friday_c': '18:00',
'monday2': None,
'saturday2': None,
'friday': '09:00',
'tuesday': '09:00',
'thursday2_c': None,
'wednesday_c': '18:00',
'tuesday2_c': None,
'friday2': None,
'tuesday_c': '18:00',
'wednesday': '09:00',
'sunday_c': None,
'sunday2': None,
'thursday_c': '18:00',
'sunday': None,
'monday': '09:00',
'saturday': None,
'friday2_c': None,
'wednesday2_c': None,
'wednesday2': None,
'tuesday2': None,
'saturday2_c': None,
'sunday2_c': None
}
正如你在dict中看到的那样,星期一是开放时间,monday_c是关闭时间。例如,如果mon2有一个值,则意味着有两个开放时间。就像上面的例子一样。
我需要比较这些时间,找到一种方法来检测每种可能的组合并打印出来。 Mo-Tu和We-Sa或Mo-Fr和Mo2-Fr2或Mo-Th或Tu-Sa等。
最聪明的方法是什么? 我试图遍历每一个并将它们与每个值进行比较。 然而,对我来说,覆盖每一个而不重复已经证明有点挑战。 如果每种可能性的陈述看似粗糙。
我写了一个简单的代码,在这种情况下可以使用:`
if hours['monday'] == hours['tuesday'] and hours['monday_c'] == hours['tuesday_c'] \
and hours['monday'] == hours['wednesday'] and hours['monday_c'] == hours['wednesday_c']\
and hours['monday'] == hours['thursday'] and hours['monday_c'] == hours['thursday_c'] \
and hours['monday'] == hours['friday'] and hours['monday_c'] == hours['friday_c']:
print('open mon-fri from 09:00 - 19:00')
答案 0 :(得分:0)
除非我完全误解了你,否则这就是你要找的东西。您需要第三方软件包才能节省大量if
语句的空间。在运行之前执行pip install fuzzywuzzy[speedup]
。
import itertools
from fuzzywuzzy import process
combos = list(itertools.combinations(hours.keys(), 2))
valid_choices = []
for tup in combos:
if process.fuzz.ratio(tup[0], tup[1]) > 80 or tup[0].endswith('c'):
pass
elif tup[0] != tup[1]:
valid_choices.append(tup)
print valid_choices
('tuesday', 'friday2')
('tuesday', 'wednesday2')
('tuesday', 'thursday_c')
('tuesday', 'saturday')
('tuesday', 'wednesday2_c')
....
为了简洁起见,我没有打印所有选择。我还排除了元组的第一部分以截止日期开始的所有选择,因为我不知道这是否是有效的选择。如果它是有效选择,请从or tup[0].endswith('c')
循环中的第一个if
语句中删除for
。