在词典列表中搜索Python字典值的最佳方法是什么?

时间:2009-10-16 20:38:11

标签: python

我有以下数据结构:

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

我想搜索上面的列表,看看它是否有任何具有特定值的网站。例如,搜索上面的内容以查看列表是否包含site ='Superuser'的字典并返回True / False。我可以通过循环遍历每个项目并比较它们来完成上述操作。有没有其他方法可以实现搜索?

4 个答案:

答案 0 :(得分:26)

any(d['site'] == 'Superuser' for d in data)

答案 1 :(得分:9)

filter( lambda x: x['site']=='Superuser', data )

答案 2 :(得分:4)

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

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

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

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

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

答案 3 :(得分:1)

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

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