我有一本具有以下结构的字典:
dictProblems[tickets['IssueID']] = tickets['Subject'][len(TermProblem):], tickets['IssueDate'].strip()
表示dictProblems
的一个条目看起来像这样:
dictProblems[TicketId (int)] = (Subject (string), Date (date))
如果我尝试迭代所有值,我将永远不会受到打击:
if tickets['Subject'] in dictProblems.itervalues():
如何遍历多维字典?
答案 0 :(得分:1)
由于您没有在搜索特定日期,因此只想搜索主题:
if tickets['Subject'] in set(subject for subject, date in dictProblems.itervalues())
答案 1 :(得分:1)
找到匹配项后,可以将any()
与生成器表达式配合使用来缩短搜索范围:
if any(tickets['Subject'] == subject for subject, _ in dictProblems.itervalues()):
答案 2 :(得分:1)
问题是您的dict.values
包含一个元组的迭代器。在这种可迭代的环境中测试tuple
可以直接进行,而对标量则不是。
在Python 3.x中,您可以使用next
+ zip
提取每个字典值的第一个值的tuple
:
d = {'a': (1, 2), 'b': (3, 4), 'c': (5, 6)}
3 in next(zip(*d.values())) # True
如果要重复执行此类操作,则可以将这些值存储在set
中,以便从那时起进行O(1)访问:
values_set = set(next(zip(*d.values())))
3 in values_set # True
在Python 2.7中可行的另一种选择是将any
与生成器理解一起使用:
any(3 == first for first, second in d.values()) # True
any(3 == i[0] for i in d.values()) # True
any(3 == next(iter(i)) for i in d.values()) # True