我有关于员工打卡时间的数据。你知道吗
员工可以通过自动流程(通过钥匙卡或指纹)或通过简单的web表单手动报告其开始时间。你知道吗
问题是有些员工不小心报告了不止一种方法的时间
输入流数据包含在两个字典中,其值如下所示:
我尝试迭代字典和计数(不是求和),如果员工在特定日期登录。你知道吗
def count_type(logins, punch_clock_data):
counter = 0
ans_dict = {}
for punch_clock_key, punch_clock_value in punch_clock_data.items():
for element in punch_clock_value:
if element not in ans_dict:
l1 = logins.get(element)
for i in range(len(l1)):
if i == 1:
counter+=1
break
ans_dict[punch_clock_key] = counter
print(f'this employee was at work {counter} days this week by {punch_clock_key} login')
return ans_dict
# each item in the array is a representation of weekday. for example,
# on Sunday there was not any log in data.
# on Tuesday, this employee reported login both on web form and by
# card(flag = 1) etc.
logins = { 'card' :[0, 1, 1, 0, 0, 0, 0],
'fingerprint' :[0, 0, 0, 1, 1, 0, 0],
'web form' :[0, 0, 1, 1, 0, 1, 1]
}
# dictionary contains data on types of punch clock
punch_clock_data = { 'automated' :['card', 'fingerprint'],
'manual' :['web form'],
'all_types' :['card', 'fingerprint', 'web form']
}
res = count_type(logins, punch_clock_data)
print(res)
我的输出不符合预期。 这是我的输出
{'automated': 2, 'manual': 3, 'all_types': 6}
但我想知道的是:
{'automated': 4, 'manual': 4, 'all_types': 6}
我认为我的问题是我需要按索引而不是按值迭代所有工作日列表。 对于一周中的每一天,获取正确的索引,然后进行计数(垂直而不是水平)
看起来您只想计算员工在特定打卡时间类别中通过多种方法登录的天数。您可以将每个类别的登录方法列表压缩到一起,并测试其中是否有登录。你知道吗
根据你的评论,要求一个版本,使它更容易看到所涉及的步骤。这里有点小故障。你知道吗
看看这个密码
例如,对于所有类型,我创建了一个tmp\u选项卡,它将3个选项卡转换为
如果col的值大于等于0,则它是每个col和counter的总和+=1
这里的键,您需要像这样对登录进行求和,例如
all type
:所以你可以试试这个:
使用zip、zip和list comprehensive将有助于减少代码:
现在我们可以进一步简化代码:
多亏了
build-in sum
:最后的结果函数是:
相关问题 更多 >
编程相关推荐