将dict项目相互比较得到时间帧的匹配项目

时间:2017-05-26 15:00:18

标签: python python-3.x

以下是我必须做的事情,我们有很多不同的业务。 从星期一到星期五,每个都会在不同的日子打开和关闭。 一些从星期二到星期五,有些星期一 - 星期五从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')
		

1 个答案:

答案 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