猿问

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

我们正在使用一个帮助台系统,它有一个 API,并且创建了很多来自 Nagios 等监控解决方案的票证。格式总是一样的,问题用“PROBLEM:问题描述”报告,解决用“OK:问题描述”报告。我现在想合并这两张票,其中在特定时间范围(5 分钟)内发布了问题和确定消息。因此:


我创建了一个字典,其中包含来自帮助台系统的票证值。结构如下所示:


dictTickets[IssueID] = Subject, Date

IssueID = 工单的唯一标识符。


然后我检查“OK”-Messages 中的所有主题并遍历字典以查看是否存在具有相同主题的 PROBLEM-Message:


if any(tickets['Subject'][len(TermOk):] == first for first, second in dictProblems.values()):

现在问题来了:如果识别出相同的消息,我将需要票证字典中的密钥来识别票证 ID。我有来自 OK-Message 的票证 ID,因为我遍历了所有这些票证,但我不知道如何从匹配值的字典中获取键。


你能帮我吗?


慕仙森
浏览 270回答 2
2回答

牧羊人nacy

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

ibeautiful

您可以使用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()因此非常适合,因为它将返回它找到的第一个匹配项的值。
随时随地看视频慕课网APP

相关分类

Python
我要回答