繁体   English   中英

如果其中一个值大于零,如何比较两个字典并打印

[英]How to compare two dictionaries and print if one of the values are above zero

我一直在尝试使用 JSON object ,我一直在尝试从两个不同的键中获取值。 我想要做的是检查 object 1 中是否包含 object 2 并且值超过 0 然后我想打印出来。

get_json = json.dumps({
            "attributes": {
                "203": {
                    "id": "203",
                    "code": "sizefootwear_conf",
                    "label": "EU",
                    "options": [{
                        "id": "6320",
                        "label": "38",
                        "products": ["69813"]
                    },
                        {
                            "id": "6351",
                            "label": "38,5",
                            "products": ["69817"]
                        },
                        {
                            "id": "6335",
                            "label": "39",
                            "products": ["69818"]
                        },
                        {
                            "id": "6354",
                            "label": "40",
                            "products": ["69819"]
                        },
                        {
                            "id": "6338",
                            "label": "40,5",
                            "products": ["69820"]
                        },
                        {
                            "id": "6357",
                            "label": "41",
                            "products": ["69821"]
                        },
                        {
                            "id": "6326",
                            "label": "42",
                            "products": ["69822"]
                        },
                        {
                            "id": "6362",
                            "label": "42,5",
                            "products": ["69823"]
                        },
                        {
                            "id": "6341",
                            "label": "43",
                            "products": ["69824"]
                        },
                        {
                            "id": "6365",
                            "label": "44",
                            "products": ["69814"]
                        },
                        {
                            "id": "6344",
                            "label": "44,5",
                            "products": ["69815"]
                        },
                        {
                            "id": "6370",
                            "label": "45,5",
                            "products": ["69816"]
                        }
                    ],
                    "position": "0"
                },
                "205": {
                    "id": "205",
                    "code": "sizefootwearus_conf",
                    "label": "US",
                    "options": [{
                        "id": "6319",
                        "label": "5,5",
                        "products": ["69813"]
                    },
                        {
                            "id": "6372",
                            "label": "6,0",
                            "products": ["69817"]
                        },
                        {
                            "id": "6334",
                            "label": "6,5",
                            "products": ["69818"]
                        },
                        {
                            "id": "6350",
                            "label": "7,0",
                            "products": ["69819"]
                        },
                        {
                            "id": "6337",
                            "label": "7,5",
                            "products": ["69820"]
                        },
                        {
                            "id": "6353",
                            "label": "8,0",
                            "products": ["69821"]
                        },
                        {
                            "id": "6325",
                            "label": "8,5",
                            "products": ["69822"]
                        },
                        {
                            "id": "6356",
                            "label": "9,0",
                            "products": ["69823"]
                        },
                        {
                            "id": "6340",
                            "label": "9,5",
                            "products": ["69824"]
                        },
                        {
                            "id": "6364",
                            "label": "10,0",
                            "products": ["69814"]
                        },
                        {
                            "id": "6343",
                            "label": "10,5",
                            "products": ["69815"]
                        },
                        {
                            "id": "6328",
                            "label": "11,5",
                            "products": ["69816"]
                        }
                    ],
                    "position": "1"
                },
                "204": {
                    "id": "204",
                    "code": "sizefootwearuk_conf",
                    "label": "UK",
                    "options": [{
                        "id": "6318",
                        "label": "5,0",
                        "products": ["69813"]
                    },
                        {
                            "id": "6352",
                            "label": "5,5",
                            "products": ["69817"]
                        },
                        {
                            "id": "6743",
                            "label": "6,0-EU39",
                            "products": ["69818"]
                        },
                        {
                            "id": "6744",
                            "label": "6,0-EU40",
                            "products": ["69819"]
                        },
                        {
                            "id": "6355",
                            "label": "6,5",
                            "products": ["69820"]
                        },
                        {
                            "id": "6336",
                            "label": "7,0",
                            "products": ["69821"]
                        },
                        {
                            "id": "6361",
                            "label": "7,5",
                            "products": ["69822"]
                        },
                        {
                            "id": "6324",
                            "label": "8,0",
                            "products": ["69823"]
                        },
                        {
                            "id": "6363",
                            "label": "8,5",
                            "products": ["69824"]
                        },
                        {
                            "id": "6339",
                            "label": "9,0",
                            "products": ["69814"]
                        },
                        {
                            "id": "6366",
                            "label": "9,5",
                            "products": ["69815"]
                        },
                        {
                            "id": "6369",
                            "label": "10,5",
                            "products": ["69816"]
                        }
                    ],
                    "position": "2"
                }
            },
            "productStockAlert": {
                "entity": "69825",
                "map": {
                    "203": {
                        "label": "52,5",
                        "": "",
                        "6610": "6610",
                        "6498": "6498",
                        "6582": "6582",
                        "6516": "6516",
                        "6501": "6501",
                        "6518": "6518",
                        "6504": "6504",
                        "6395": "6395",
                        "6404": "6404",
                        "6533": "6533",
                        "6407": "6407",
                        "6530": "6530",
                        "6410": "6410",
                        "6413": "6413",
                        "6416": "6416",
                        "6534": "6534",
                        "6419": "6419",
                        "6422": "6422",
                        "6425": "6425",
                        "6398": "6398",
                        "6401": "6401",
                        "6531": "6531",
                        "6431": "6431",
                        "6443": "6443",
                        "6446": "6446",
                        "6495": "6495",
                        "6449": "6449",
                        "6452": "6452",
                        "6455": "6455",
                        "6458": "6458",
                        "6461": "6461",
                        "6807": "6807",
                        "6464": "6464",
                        "6434": "6434",
                        "6437": "6437",
                        "6558": "6558",
                        "6440": "6440",
                        "6480": "6480",
                        "6481": "6481",
                        "6382": "6382",
                        "6465": "6465",
                        "6631": "6631",
                        "6332": "6332",
                        "6466": "6466",
                        "6348": "6348",
                        "6634": "6634",
                        "6320": "6320",
                        "6351": "6351",
                        "6384": "6384",
                        "6659": "6659",
                        "6335": "6335",
                        "6388": "6388",
                        "6508": "6508",
                        "6354": "6354",
                        "6338": "6338",
                        "6389": "6389",
                        "6664": "6664",
                        "6357": "6357",
                        "6390": "6390",
                        "6506": "6506",
                        "6637": "6637",
                        "6326": "6326",
                        "6362": "6362",
                        "6391": "6391",
                        "6640": "6640",
                        "6341": "6341",
                        "6392": "6392",
                        "6560": "6560",
                        "6365": "6365",
                        "6344": "6344",
                        "6385": "6385",
                        "6838": "6838",
                        "6368": "6368",
                        "6386": "6386",
                        "6370": "6370",
                        "6643": "6643",
                        "6628": "6628",
                        "6329": "6329",
                        "6529": "6529",
                        "6387": "6387",
                        "6843": "6843",
                        "6347": "6347",
                        "6470": "6470",
                        "6360": "6360",
                        "6646": "6646",
                        "6472": "6472",
                        "6323": "6323",
                        "6564": "6564",
                        "6593": "6593",
                        "6474": "6474",
                        "6376": "6376",
                        "6565": "6565",
                        "6561": "6561",
                        "6567": "6567",
                        "6604": "6604",
                        "6607": "6607"
                    },
                    "205": {
                        "label": "18,0",
                        "": "",
                        "6513": "6513",
                        "6497": "6497",
                        "6583": "6583",
                        "6500": "6500",
                        "6821": "6821",
                        "6503": "6503",
                        "6532": "6532",
                        "6394": "6394",
                        "6403": "6403",
                        "6406": "6406",
                        "6409": "6409",
                        "6412": "6412",
                        "6415": "6415",
                        "6418": "6418",
                        "6421": "6421",
                        "6424": "6424",
                        "6397": "6397",
                        "6400": "6400",
                        "6430": "6430",
                        "6442": "6442",
                        "6445": "6445",
                        "6448": "6448",
                        "6451": "6451",
                        "6454": "6454",
                        "6457": "6457",
                        "6460": "6460",
                        "6463": "6463",
                        "6433": "6433",
                        "6436": "6436",
                        "6439": "6439",
                        "6555": "6555",
                        "6468": "6468",
                        "6507": "6507",
                        "6632": "6632",
                        "6331": "6331",
                        "6319": "6319",
                        "6635": "6635",
                        "6372": "6372",
                        "6334": "6334",
                        "6661": "6661",
                        "6350": "6350",
                        "6337": "6337",
                        "6663": "6663",
                        "6353": "6353",
                        "6619": "6619",
                        "6325": "6325",
                        "6621": "6621",
                        "6638": "6638",
                        "6356": "6356",
                        "6340": "6340",
                        "6623": "6623",
                        "6641": "6641",
                        "6364": "6364",
                        "6343": "6343",
                        "6625": "6625",
                        "6840": "6840",
                        "6367": "6367",
                        "6328": "6328",
                        "6644": "6644",
                        "6371": "6371",
                        "6346": "6346",
                        "6842": "6842",
                        "6359": "6359",
                        "6322": "6322",
                        "6647": "6647",
                        "6373": "6373",
                        "6566": "6566",
                        "6375": "6375",
                        "6562": "6562",
                        "6605": "6605",
                        "6608": "6608"
                    },
                    "204": {
                        "label": "17,0",
                        "": "",
                        "6611": "6611",
                        "6514": "6514",
                        "6496": "6496",
                        "6515": "6515",
                        "6499": "6499",
                        "6517": "6517",
                        "6502": "6502",
                        "6393": "6393",
                        "6505": "6505",
                        "6402": "6402",
                        "6405": "6405",
                        "6408": "6408",
                        "6411": "6411",
                        "6414": "6414",
                        "6417": "6417",
                        "6420": "6420",
                        "6423": "6423",
                        "6396": "6396",
                        "6399": "6399",
                        "6429": "6429",
                        "6745": "6745",
                        "6441": "6441",
                        "6444": "6444",
                        "6447": "6447",
                        "6450": "6450",
                        "6453": "6453",
                        "6456": "6456",
                        "6459": "6459",
                        "6462": "6462",
                        "6432": "6432",
                        "6435": "6435",
                        "6438": "6438",
                        "6467": "6467",
                        "6381": "6381",
                        "6633": "6633",
                        "6330": "6330",
                        "6349": "6349",
                        "6636": "6636",
                        "6318": "6318",
                        "6352": "6352",
                        "6660": "6660",
                        "6333": "6333",
                        "6743": "6743",
                        "6744": "6744",
                        "6355": "6355",
                        "6662": "6662",
                        "6336": "6336",
                        "6620": "6620",
                        "6361": "6361",
                        "6622": "6622",
                        "6639": "6639",
                        "6324": "6324",
                        "6363": "6363",
                        "6624": "6624",
                        "6642": "6642",
                        "6339": "6339",
                        "6366": "6366",
                        "6626": "6626",
                        "6839": "6839",
                        "6342": "6342",
                        "6627": "6627",
                        "6369": "6369",
                        "6645": "6645",
                        "6327": "6327",
                        "6358": "6358",
                        "6841": "6841",
                        "6345": "6345",
                        "6471": "6471",
                        "6648": "6648",
                        "6321": "6321",
                        "6473": "6473",
                        "6374": "6374",
                        "6563": "6563",
                        "6606": "6606",
                        "6609": "6609"
                    }
                },
                "child": {
                    "6320_6319_6318_": {
                        "entity": "69813",
                        "stock_number": 0,
                        "stock_status": false,
                        "productId": "69813",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6365_6364_6339_": {
                        "entity": "69814",
                        "stock_number": 5,
                        "stock_status": true,
                        "productId": "69814",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6344_6343_6366_": {
                        "entity": "69815",
                        "stock_number": 3,
                        "stock_status": true,
                        "productId": "69815",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6370_6328_6369_": {
                        "entity": "69816",
                        "stock_number": 1,
                        "stock_status": true,
                        "productId": "69816",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6351_6372_6352_": {
                        "entity": "69817",
                        "stock_number": 0,
                        "stock_status": false,
                        "productId": "69817",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6335_6334_6743_": {
                        "entity": "69818",
                        "stock_number": 0,
                        "stock_status": false,
                        "productId": "69818",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6354_6350_6744_": {
                        "entity": "69819",
                        "stock_number": 0,
                        "stock_status": false,
                        "productId": "69819",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6338_6337_6355_": {
                        "entity": "69820",
                        "stock_number": 0,
                        "stock_status": false,
                        "productId": "69820",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6357_6353_6336_": {
                        "entity": "69821",
                        "stock_number": 3,
                        "stock_status": true,
                        "productId": "69821",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6326_6325_6361_": {
                        "entity": "69822",
                        "stock_number": 4,
                        "stock_status": true,
                        "productId": "69822",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6362_6356_6324_": {
                        "entity": "69823",
                        "stock_number": 6,
                        "stock_status": true,
                        "productId": "69823",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    },
                    "6341_6340_6363_": {
                        "entity": "69824",
                        "stock_number": 6,
                        "stock_status": true,
                        "productId": "69824",
                        "parent_url": "https://www.bstn.com/eu_en/p/jordan-jordan-why-not-zer0-4-dd4889-006-0250549"
                    }
                }
            }
        }
    )

所以我所做的是我在一个列表中创建了两个字典:

first_loop = []
second_loop = []
total_stock = 0

for idx, sizes in json_value["attributes"].items():
    for getId in sizes["options"]:
        first_loop.append({getId["label"]: getId["products"][0]})
    break

for idx, test in json_value["productStockAlert"]["child"].items():
    total_stock += test["stock_number"]
    second_loop.append({test["productId"]: test["stock_number"]})

print("first_loop", first_loop)
print("second_loop", second_loop)
print("total_stock", total_stock)

返回:

first_loop [{'38': '69813'}, {'38,5': '69817'}, {'39': '69818'}, {'40': '69819'}, {'40,5': '69820'}, {'41': '69821'}, {'42': '69822'}, {'42,5': '69823'}, {'43': '69824'}, {'44': '69814'}, {'44,5': '69815'}, {'45,5': '69816'}]
second_loop [{'69813': 0}, {'69814': 5}, {'69815': 3}, {'69816': 1}, {'69817': 0}, {'69818': 0}, {'69819': 0}, {'69820': 0}, {'69821': 3}, {'69822': 4}, {'69823': 6}, {'69824': 6}]
total_stock 28

我的问题是如何从first_loop比较我检查 ID(等 69816)在 second_loop 中并且值高于 0,如果高于 0,那么我想将它添加到 append 到新列表等: 45,5 (1) (这是来自 first_loop 的大小数字和来自 second_loop 的数字(值)。

Output 最终会:

>>> ["41 (3)", "42 (4)", "42,5 (6)", "43 (6)", "44 (5)", "44,5 (3)", "45,5 (1)"]

不确定这是否是最有效的方法,但您可以:

  • 使字典不是列表,它需要是一个列表吗?
  • 交换first_loop的键值
  • 与集合相交
  • 从原始值获取值,仅在 > 0 时打印

[代码未测试]

first_loop = {}
second_loop = {}
total_stock = 0

for idx, sizes in json_value["attributes"].items():
    for getId in sizes["options"]:
        first_loop[getId["products"][0]] = getId["label"]
    break

for idx, test in json_value["productStockAlert"]["child"].items():
    total_stock += test["stock_number"]
    second_loop[test["productId"]] = test["stock_number"]


matching = set(first_loop.keys()).intersection(second_loop.keys())

for prod_id in matching:
   stock = second_loop.get(prod_id)
   if stock > 0:
     print(f"{first_loop.get(prod_id) ({stock})")

最后,你有一个break语句,这将使它只运行一次......在这种情况下你不需要一个for循环......

这太具体了,但希望它有帮助......

基本上,你只需要创建id-label mappingid-count mapping并将它们合并:

id_label_mapping = {o["products"][0]: o["label"] for o in next(iter(json_value["attributes"].values()))["options"]}
id_count_mapping = {o["productId"]: o["stock_number"] for o in json_value["productStockAlert"]["child"].values()}
result = [f"{l} ({id_count_mapping[k]})" for k, l in id_label_mapping.items() if id_count_mapping.get(k)]

在您的代码中,您犯了两个主要错误,这使得最后一步(合并)的实现更加困难。

  1. 您正在创建字典列表而不是具有不同键的单个字典;
  2. first_loop ,您使用label作为键,但在second_loop中,您使用的是productId

如果我们将修复这两个差距,您的代码将起作用:

first_loop = {}
second_loop = {}
total_stock = 0

for idx, sizes in json_value["attributes"].items():
    for getId in sizes["options"]:
        first_loop[getId["products"][0]] = getId["label"]
    break

for idx, test in json_value["productStockAlert"]["child"].items():
    total_stock += test["stock_number"]
    second_loop[test["productId"]] = test["stock_number"]

result = []

for product_id, label in first_loop.items():
    count = second_loop.get(product_id)
    if count:  # filters both None (key doesn't exit) and 0
        result.append(f"{label} ({count})")

print("result", result)
print("total_stock", total_stock)

暂无
暂无

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

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