为了账号安全,请及时绑定邮箱和手机立即绑定

在python 2.7中遍历二维字典时查找键

在python 2.7中遍历二维字典时查找键

慕仙森 2021-07-07 17:12:03
我们正在使用一个帮助台系统,它有一个 API,并且创建了很多来自 Nagios 等监控解决方案的票证。格式总是一样的,问题用“PROBLEM:问题描述”报告,解决用“OK:问题描述”报告。我现在想合并这两张票,其中在特定时间范围(5 分钟)内发布了问题和确定消息。因此:我创建了一个字典,其中包含来自帮助台系统的票证值。结构如下所示:dictTickets[IssueID] = Subject, DateIssueID = 工单的唯一标识符。然后我检查“OK”-Messages 中的所有主题并遍历字典以查看是否存在具有相同主题的 PROBLEM-Message:if any(tickets['Subject'][len(TermOk):] == first for first, second in dictProblems.values()):现在问题来了:如果识别出相同的消息,我将需要票证字典中的密钥来识别票证 ID。我有来自 OK-Message 的票证 ID,因为我遍历了所有这些票证,但我不知道如何从匹配值的字典中获取键。你能帮我吗?
查看完整描述

2 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

any 将在第一场比赛时停止,并且不会告诉您是哪一场。


最好使用匹配项构建列表理解并在字典键+值上循环以测试值并生成相应的键


search_for = tickets['Subject'][len(TermOk):]

result = [ticket_id for ticket_id,(first, second) in dictProblems.items() if search_for == first]

if result:

   # there are matches

   # print them or whatever


查看完整回答
反对 回复 2021-07-28
?
ibeautiful

TA贡献1993条经验 获得超5个赞

您可以使用next()生成器表达式:


next(ticket_id for ticket_id, (subject, _) in dictProblems.items() if tickets['Subject'][len(TermOk):] == subject)

您还可以为next()第二个参数指定一个默认值,这样如果没有找到具有给定主题的票证,它将返回None,以便您也可以将其用作if条件,代替any():


ticket_id = next((ticket_id for ticket_id, (subject, _) in dictProblems.items() if tickets['Subject'][len(TermOk):] == subject), None)

if ticket_id:

     do_something(ticket_id)

由于票证 ID 可能是唯一的,next()因此非常适合,因为它将返回它找到的第一个匹配项的值。


查看完整回答
反对 回复 2021-07-28
  • 2 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号