【问题标题】:Search Python dictionary where value is list搜索值是列表的 Python 字典
【发布时间】:2013-04-14 02:32:33
【问题描述】:

如果我有一本字典,其中的值默认设置为一个列表,我该如何在字典中的所有这些列表中搜索某个术语?

例如:

textbooks = {"math":("red", "large"), "history":("brown", "old", "small")} 

随着更多的术语和情况可能再次发生相同的事情,我怎么能说找到所有键,其中它们的值是包含“红色”的列表?在我上面的示例中,我希望它找到的唯一一个是“数学”。

【问题讨论】:

  • 提示:如果您提供SSCCE,每个人的生活都会变得更轻松。在这种情况下,这意味着实际上将引号放在字符串周围,以使您的示例有效的 Python 语法,以便人们可以快速将您的代码复制并粘贴到他们的控制台中以进行操作。
  • 谢谢,我已经为你添加了引号。

标签: python dictionary python-2.7


【解决方案1】:
[k for k, v in textbooks.iteritems() if 'red' in v]

它是 Pythonic 的简写

res = []
for key, val in textbooks.iteritems():
    if 'red' in val:
        res.append(key)

查看列表comprehension in Python documentation

【讨论】:

  • 感谢您的链接,但它并不能帮助我理解这些变量的来源或它们代表什么......
  • 什么变量? redtexbooks 来自您的问题。 k, v 来自 for 循环,它们代表 dict 项的键和值,在您的情况下,项是 (math, (red, large)) 和 (history, (brown, old, small)),第一个元素是关键,其次是价值。
  • 另外你可能应该阅读序列解包here
  • 那么 key 和 val 可以命名任何东西并且应该可以工作吗?我收到一个莫名其妙的列表索引超出范围错误。我需要添加任何循环来防止这种情况吗?还是别的什么?
  • 变量名无关紧要——只要它们是一致的(理想情况下,它们应该长于 1 个字母,但在列表理解中,这不是一种罪过)。理解中有一个简单的循环 - 请参阅单词 for
【解决方案2】:
[key for key, corresponding_list in textbook.items() if 'red' in corresponding_list]

【讨论】:

    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2022-11-12
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多