繁体   English   中英

创建包含在 python 中的对象中的新 url 列表

[英]Create a list of new urls contained in objects in python

我有两个 json 数据库。 如果“img_url”中有一个新值(最后一个 json 中的一个不在另一个中),我想打印 url 或将其放入变量中。 目标只是找到新值的列表。 输入 json:

last_data = [
{
    "objectID": 16240,
    "results": [
        {
            "img_url": "https://img.com/1.jpg"
        },
        {
            "img_url": "https://img.com/2.jpg"
        },
        {
            "img_url": "https://img.com/30.jpg"
        }
    ]
}
{
    "objectID": 16242,
    "results": [
        {
            "img_url": "https://img.com/1.jpg"
        },
        {
            "img_url": "https://img.com/2.jpg"
        },
        {
            "img_url": "https://img.com/3.jpg"
        }
    ]
}]
# ...
#multiple other objectIDs

]

第二个输入:

second_data =[
{
    "objectID": 16240,
    "results": [
        {
            "img_url": "https://img.com/1.jpg"
        },
        {
            "img_url": "https://img.com/2.jpg"
        }
    ]
},
{
    "objectID": 16242,
    "results": [
        {
            "img_url": "https://img.com/1.jpg"
        },
        {
            "img_url": "https://img.com/2.jpg"
        }
    ]
}...
#multiple other objectIDs

]

我想 output 只有https://img.com/3.jpghttps://img.com/3.jpg有多个对象(因为它可以放在变量列表中)

我的代码:

#last file
    for item_last in last_data:
        results_last = item_last["results"]
        if results_last is not []:
            for result_last in results_last:
                ccv_last = result_last["img_url"]
    #second file
    for item_second in second_data:
        results_second = item_second["results"]
        if results_second is not []:
        # loop in results
            for result_second in results_second:
                ccv_second = result_second["img_url"]

    if gm_last != gm_second and gm_last is not None:
    print(gm_last)

如果您想在这里找到两个不同列表之间的区别,那就是。 我稍微修改了您的相同代码以获得预期的结果。

#last file
ccv_last = []
for item_last in last_data:
    results_last = item_last["results"]
    if results_last:
        for result_last in results_last:
            ccv_last.append(result_last["img_url"])
#second file
ccv_second = []
for item_second in second_data:
    results_second = item_second["results"]
    if results_second:
        for result_second in results_second:
            ccv_second.append(result_second["img_url"])

diff_list = list(set(ccv_last)-set(ccv_second)))

Output:

['https://img.com/30.jpg', 'https://img.com/3.jpg']

但是,您可以计划稍微更改结果 model 以获得更好的性能,请在下面找到。

如果您认为结果列表中的字典没有计划进一步的键,那么您可能只需要列表。 所以你可以改变 dict -> list

...
"results": [
    {
        "img_url": "https://img.com/1.jpg"
    },
    {
        "img_url": "https://img.com/2.jpg"
    }
]
...

只是网址列表

...
"img_url_results": ["https://img.com/1.jpg","https://img.com/2.jpg"]
...

通过执行此更改,您可以跳过一个 for 循环。

#last file
ccv_last = []
for item_last in last_data:
    if item_last.get('img_url_results'):
       ccv_last.extend(item_last["img_url_results"])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM