我有以下数据结构:
data = [
{'site': 'Stackoverflow', 'id': 1},
{'site': 'Superuser', 'id': 2},
{'site': 'Serverfault', 'id': 3}
]
我想搜索上面的列表,看看它是否有任何具有特定值的网站。例如,搜索上面的内容以查看列表是否包含site ='Superuser'的字典并返回True / False。我可以通过循环遍历每个项目并比较它们来完成上述操作。有没有其他方法可以实现搜索?
答案 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发布的内容)