【问题标题】:What's the best way to search for a Python dictionary value in a list of dictionaries?在字典列表中搜索 Python 字典值的最佳方法是什么?
【发布时间】:2009-10-17 04:48:00
【问题描述】:

我有以下数据结构:

  data = [
      {'site': 'Stackoverflow', 'id': 1},
      {'site': 'Superuser', 'id': 2}, 
      {'site': 'Serverfault', 'id': 3}
  ]

我想搜索上面的列表,看看它是否有任何具有特定值的站点。例如,搜索上面的内容以查看列表是否包含带有 site = 'Superuser' 的字典并返回 True/False。我可以按照上述常用方法循环每个项目并进行比较。有没有其他方法可以实现搜索?

【问题讨论】:

  • 数据排序有优化。如果没有,请使用any() 解决方案。

标签: python


【解决方案1】:
any(d['site'] == 'Superuser' for d in data)

【讨论】:

  • 哇,我们在 10 秒内发布了完全相同的内容。猜猜我会删除我的。 :(
  • 请注意,这正是“循环遍历每个项目并比较它们”,这是 Thierry Lam 不想要的。
  • 我认为他的意思是一个常规的for 循环。
【解决方案2】:
filter( lambda x: x['site']=='Superuser', data )

【讨论】:

    【解决方案3】:

    列表绝对需要循环。这就是列表的用途。

    为了避免循环,你必须避免使用列表。

    您需要搜索关键字和对象的字典。

    sites = dict( (d['site'],d) for d in data )
    ids = dict( (d['id'],d] for d in data )
    

    现在您可以使用散列查找而不是循环查找与 sites["Superuser"] 的“超级用户”关联的项目。

    【讨论】:

      【解决方案4】:

      我不确定 python 语法,但它可能对你有用。在构建您的主要数据结构时,还要构建一个以站点名称为键的散列或关联数组的并行结构;然后要查看是否存在给定站点,您尝试使用站点名称在哈希中查找。如果成功,您知道该站点的数据结构中有一条记录,并且您已经在哈希查找时完成了它(可能是 O(1) 或 O(log2(n)),具体取决于哈希技术)列表遍历的 O(n/2)。

      (在写作时更新:这几乎是 S.Lott 发布的内容)

      【讨论】:

        猜你喜欢
        • 2011-04-24
        • 2013-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-28
        • 2015-04-02
        • 1970-01-01
        相关资源
        最近更新 更多