python - 根据元素在列表中出现的次数执行操作
问题描述
我有一个清单:
CASE 1 : group_member = ['MEU1', 'MEU1','MEU2', 'MEU1','MEU1','MEU2','MEU1','MEU2','MEU1','MEU3']
CASE 2 : group_member = ['MEU1','MEU2','MEU3','None','None']
CASE 3 : group_member = ['MEU1','MEU2','MEU3','MEU1','CEU1']
我要做的是在 sql 中的表中插入一个值,如果列表的 70% 具有相同的值,或者如果值低于 70%,则向某些用户发送邮件。
对于我上面的列表,这将是第一种情况,因为 EU1 值大于 70%。
我试过这样的事情:
from collections import Counter
freqDict = Counter(group_member)
size = len(group_member)
if len(group_member) > 0 :
for (key,val) in freqDict.items():
if (val >= (7*size/10)):
print(">= than70%")
insert_into_table(group)
elif (val <(7*size/10)) :
print("under 70%")
send_mail_notification(group)
这样做的问题是它会检查键和值的每个组合,这意味着即使一个值 >= 70%,它仍然会进入elif
并多次发送同一组的邮件,这是不可接受的,但我没有还没有找到解决方案。
我怎样才能避免这种情况?对于上面的列表,它应该只在表中插入值并移动到下一个列表,对于第二个列表,它应该只发送一次邮件通知,因为没有元素 >=70%。
我需要实现以下情况:
如果 >=70% 是相同的值(例如 CASE1 中的 MEU1),则插入到表中。
IF >=70% 属于同一个单位 (M) 但不是同一个部落,所以在案例 3 中,因为 5 个元素中有 4 个具有 M,它们属于同一个单位 --> 发送通知
解决方案
我相信您应该检查是否至少有一项值大于或等于 70,如果没有这样的值,则发送邮件。这意味着您应该在浏览完列表后检查是否应该发送邮件。
from collections import Counter
freqDict = Counter(group_member)
size = len(group_member)
foundBigVal = False
if len(group_member) > 0 :
for (key,val) in freqDict.items():
if (val >= (7*size/10)):
print(">= than70%")
insert_into_table(group)
foundBigVal = True
break #no need to check the list further since only one can have %70 percent
if foundBigVal:
#if there's a value greater than %70 in the list, we would enter this part
print("under 70%")
send_mail_notification(group)
我将 if 放在循环之外以便调用send_mail_notification
一次,但检查列表中的每个元素。
推荐阅读
- c# - 如何使用 Polly 对任意“失败”条件进行重试和瞬态故障处理
- javascript - Loop Childens 自定义 Mongodb
- php - 我的 php 水印功能不适用于 png 图像
- vb.net - 在某些 PC 上无法解析主机名错误
- node.js - 护照未登录 | 因战略而思考
- python - 我对 cv2.findContours 有错误(...)
- ios - Swift 4 - 使用哪种类型的数组 - 将 JSON 响应解析为数组
- python - Wagtail - 以编程方式编辑现有页面
- azure-active-directory - 混合基于 OIDC 的 SPA 客户端 + OAuth 服务器客户端场景?
- php - componenthelp.php 中缺少组件错误 Joomla