【问题标题】:Create a list of new urls contained in objects in python在python中创建包含在对象中的新url列表
【发布时间】:2020-05-03 16:07:33
【问题描述】:

我有两个 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

]

我只想输出https://img.com/3.jpghttps://img.com/3.jpg url(它可以是一个列表,因为我有多个对象)或将它放在一个变量中

我的代码:

#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)

【问题讨论】:

    标签: python


    【解决方案1】:

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

    #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)))
    

    输出:

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

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

    如果您认为结果列表中的字典没有计划进一步的键,那么您可能只需要列表。所以你可以改变 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"])
    

    【讨论】:

    • 非常感谢,问题是我有重复,我想保留它,而 set() 是不可能的......我该如何改变它?
    • 你可以用字典代替列表,请看看这个解决方案它可能对你有帮助stackoverflow.com/a/41808831/9592801
    猜你喜欢
    • 2022-11-05
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2023-03-11
    • 2019-06-16
    相关资源
    最近更新 更多