【问题标题】:Finding Values in a dict in Python 2.7在 Python 2.7 中的 dict 中查找值
【发布时间】:2019-03-28 11:22:08
【问题描述】:

我有一本结构如下的字典:

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

表示dictProblems 的单个条目如下所示:

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

如果我尝试迭代所有值,我永远不会成功:

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

如何迭代多维字典?

【问题讨论】:

  • 你能在字典中添加一个例子吗?
  • 我想你可以在这里找到答案(stackoverflow.com/questions/18166581/…)
  • {5040: (u"请忽略,只是测试!", u'2018-10-23T11:31:58.383Z'), 5042: (u"请忽略,只是一个测试 2!", u'2018-10-23T11:53:14.473Z')}

标签: python python-2.7 loops dictionary


【解决方案1】:

由于您不是在搜索特定日期,因此您只想搜索主题:

if tickets['Subject'] in set(subject for subject, date in dictProblems.itervalues())

【讨论】:

  • 在这里创建一个集合真的有意义吗?
  • 这个想法是让in 运算符与问题相关联,以便更容易理解哪里出了问题
  • 您可以在任何可迭代对象上使用in
【解决方案2】:

一旦找到匹配项,您可以使用 any() 和生成器表达式来缩短搜索:

if any(tickets['Subject'] == subject for subject, _ in dictProblems.itervalues()):

【讨论】:

  • 也没有找到任何值:/
【解决方案3】:

问题是您的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

【讨论】:

  • 第一个想法:TypeError: list object is not an iterator
  • @Faulander,不,d = {'a': (1, 2), 'b': (3, 4), 'c': (5, 6)} 没有错误。我无法帮助您转换/检查您的数据,因为...您没有提供任何数据!
  • 继续你的例子:{a:5042, ("请忽略,这只是一个测试!", "2018-10-23T11:31:58.383Z")}
  • @Faulander,啊,你可能使用的是 Python 2.7?我已经更新了关于哪些版本适用于哪些版本的建议。
  • dictProblems[5042] = "请忽略,这只是一个测试!"、"2018-10-23T11:31:58.383Z" 是的,使用 python 2.7
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多