首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从API - in python嵌套字典

从API - in python嵌套字典
EN

Stack Overflow用户
提问于 2022-07-01 18:51:54
回答 2查看 90关注 0票数 0

我有一个API,其中Iam试图创建一个嵌套的json/dict输出。

API看起来有点像这样:

代码语言:javascript
运行
复制
{
            "skuNO": "SK0011 - Green Stator with Terminal Box",
            "toStationLocation": "Line 1 - Station 1",
            "quantity": "1",
        },
{
            "skuNO": "SK0011 - Green Stator with Terminal Box",
            "toStationLocation": "Line 1 - Station 2",
            "quantity": "1",
        },
{
            "skuNO": "SK0011 - Green Stator with Terminal Box",
            "toStationLocation": "Line 1 - Station 2",
            "quantity": "3",
        },

我想要一个有点像这样的输出:

代码语言:javascript
运行
复制
{
"Line 1 - Station 2": {"SK0011": 4}
"Line 1 - Station 1": {"SK0011": 1}
}

我用拉链和迪特试了几样东西,但没有取得多大的成功。我最后一次尝试是这样的,我知道这是一次非常糟糕的尝试。但我已经没有选择了。

代码语言:javascript
运行
复制
final_dict = {}
for x in data:
        int_sku = []
        int_qty = []
        int_sku.append(x['skuNO'])
        int_qty.append(x['quantity'])
        zipped = dict(zip(int_sku, int_qty))
        if x['toStationLocation'] not in final_dict:
            final_dict[x['toStationLocation']] = zipped
        else:
            for key,val in final_dict.items():
                for k,v in val.items():
                    print(k,v)
                    if k == int_sku[0]:
                       v = int(int_qty[0]) + int(v)

注:任何其他选项创建具有这3的唯一性的其他对象也很好,也很受欢迎。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-01 19:16:43

代码语言:javascript
运行
复制
final_dict = {}
for data in test_data:
    key = data["toStationLocation"]
    sku = data["skuNO"].split()[0]
    quant = int(data["quantity"])
    
    if key not in final_dict:
        final_dict[key] = {sku: quant}
    elif sku not in final_dict[key]:
        final_dict[key][sku] = quant
    else:
        final_dict[key][sku] += quant
票数 2
EN

Stack Overflow用户

发布于 2022-07-01 19:25:25

下面是另一种方法,它使用default dict简化逻辑并消除if语句:

代码语言:javascript
运行
复制
import collections

final_dict = {}
for datum in data:
    line_station = datum["toStationLocation"]
    sku = datum["skuNO"].split(" - ")[0]
    quantity = int(datum["quantity"])

    final_dict.setdefault(line_station, collections.defaultdict(int))
    final_dict[line_station][sku] += quantity

对于内部字典,我使用一个collections.defaultdict(int),它将在第一次提到它时将sku初始化为0。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72833544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档