首页 > 解决方案 > 检查列表中 dict 之间的差异

问题描述

我正在尝试从两个 json 文件(olddata 和 actual_products)中获取差异。脚本的问题是输出,它应该是“没有变化”而不是我得到 y [“link”]。

我的jsonfile示例(olddata,另一个是一样的):

[{
    "status": "sold_out",
    "link": "https://www.off---white.com/en/IT/men/products/omaa076t19e740660110#",
    "ids": "product_26781",
    "title": "\nOFF-WHITE\u2122 X NIKE T-SHIRT\n"
},
{
    "status": "sold_out",
    "link": "https://www.off---white.com/en/IT/men/products/omaa076t19e740661001#",
    "ids": "product_26782",
    "title": "\nOFF-WHITE\u2122 X NIKE T-SHIRT\n"
},
{
    "status": "in_stock",
    "link": "https://www.off---white.com/en/IT/men/products/omaa076t19e740661910#",
    "ids": "product_26783",
    "title": "\nOFF-WHITE\u2122 X NIKE T-SHIRT\n"
}]

我的代码示例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json

def load_data(file):
    with open(file) as f:
        return(json.load(f))

def save_new_data(data, file):
    with open(file, 'w') as f:
        json.dump(data, f, indent=4)

class ABC():
    def __init__(self):
        self.old_data = load_data('olddata.json')
        self.actual_products = load_data('newdata.json')

    def checkdiff(self):
        for x in self.old_data:
            for y in self.actual_products:
                if(x['status'] == "sold_out" and y['status'] == "in_stock"):
                    print("The item is available:", y["link"])
                else:
                    print("no change")

def main():
    s = ABC()
    s.checkdiff()

if __name__ == "__main__":
    main()

“我预计输出没有变化,而是我得到了可用的项目”

标签: pythonjsonlistdictionary

解决方案


如果您想使用您的代码,请将您的功能更改checkdiff为:

def checkdiff(self):
    for i in range(len(self.old_data)):
        if(self.old_data[i]['status'] == "sold_out" and self.actual_products[i]['status'] == "in_stock"):
            print("The item is available:", self.actual_products[i]["link"])
        else:
            print("no change")

输出:

no change
no change
no change

推荐阅读