在Python 2.7中的字典中查找值

时间:2018-10-24 06:30:19

标签: python python-2.7 loops dictionary

我有一本具有以下结构的字典:

dictProblems[tickets['IssueID']] = tickets['Subject'][len(TermProblem):], tickets['IssueDate'].strip()

表示dictProblems的一个条目看起来像这样:

dictProblems[TicketId (int)] = (Subject (string), Date (date))

如果我尝试迭代所有值,我将永远不会受到打击:

if tickets['Subject'] in dictProblems.itervalues():

如何遍历多维字典?

3 个答案:

答案 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