在python 2.7中更快地从大列表中搜索ID?

所以我有这两个列表:


image_names = ["IMG_1.jpg", "IMG_2.jpg"]

data = [{"name": "IMG_1.jpg", "id": "53567"},

        {"name": "IMG_2.jpg", "id": "53568"},

        {"name": "IMG_3.jpg", "id": "53569"},

        {"name": "IMG_4.jpg", "id": "53570"}]

我想在数据中的images_names 中搜索第一个项目,然后是下一个项目,依此类推,如果它具有相同的名称以获取ID 并将其添加到列表中。


这就是我这样做的方式:


for image_name in image_names:

    for datum in data:

        datum_name = datum.get("name", None)

        if datum_name == image_name:

           images_ids.append(datum.get("id", None))

现在它工作得很好,但我认为一旦我在图像名称和数据中获得大量数据,这真的效率低下。Python 中执行此操作的最佳方法是什么?我正在使用 python 2.7


白板的微信
浏览 208回答 3
3回答

蝴蝶刀刀

主要问题是您的数据结构没有设置为您想要的访问权限。而不是一个字典列表,让它成为你想要使用的自然字典:data = {"IMG_1.jpg": "53567",        "IMG_2.jpg": "53568",        "IMG_3.jpg": "53569",        "IMG_4.jpg": "53570"}现在,您只需列出相应的ids列表即可images_ids = [data[img] for img in image_names]如果您需要两种访问方法(如果您仍然需要name和id标签),那么我建议您学习使用 Pandas 数据框,将name和id用作列。这将为您提供两种方法中最好的。

莫回无

>>> images_ids = [filter(lambda x: x['name'] == name, data) for name in image_names]>>> images_ids = [i[0]['id'] for i in images_ids if i]>>> images_ids['53567', '53568']

江户川乱折腾

其他选择:[ item["id"] for item in data if item["name"] in image_names]#=> ['53567', '53568']当同名图像存在不同 id时,它也适用:data = [{"name": "IMG_1.jpg", "id": "53500"},{"name": "IMG_1.jpg", "id": "53501"}]#=> ['53500', '53501']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python