【问题标题】:How can i create a list in a dictionary without repeating certain keys [Python]?如何在字典中创建列表而不重复某些键 [Python]?
【发布时间】:2020-08-28 01:21:27
【问题描述】:

我想使用 id_type_sale 和 sale_type_description 创建一个数组(查看输出中的 object_sale_types),保留键 email、date、order_id、store 但不重复(假设它是相同的数据)。

输入

{
"105": [
    {
        "id_type_sale": 2,
        "email" : null,
        "date" : "2016-05-18",
        "order_id": 105,
        "sale_type_description": "Coffee shop",
        "store": "Ezio store"
    },
    {
        "id_type_sale": 5,
        "order_id": 105,
        "email" : null,
        "date" : "2016-05-18",
        "sale_type_description": "Book shop",
        "store": "Ezio store"
    }
],
"106": [
  {
      "id_type_sale": 3,
      "email" : null,
      "date" : "2016-05-19",
      "order_id": 106,
      "sale_type_description": "Food",
      "store": "Ezio store"
  },
  {
      "id_type_sale": 8,
      "order_id": 106,
      "email" : null,
      "date" : "2016-05-19",
      "sale_type_description": "Articles",
      "store": "Ezio store"
  }]}

预期输出

{
"105":[
    {
        "email":null,
        "date":"2016-05-18",
        "order_id":105,
        "store":"Ezio store",
        "object_sale_types":[
            {
                "id_type_sale":2,
                "sale_type_description":"Coffee shop"
            },
            {
                "id_type_sale":5,
                "sale_type_description":"Book shop"
            }
        ]
    }
],
"106":[
    {
        "email":null,
        "date":"2016-05-19",
        "order_id":106,
        "store":"Ezio store",
        "object_sale_types":[
            {
                "id_type_sale":3,
                "sale_type_description":"Food"
            },
            {
                "id_type_sale":8,
                "sale_type_description":"Articles"
            }
        ]
    }
]}

我该怎么办?有什么更好的方法?我想用python

【问题讨论】:

  • 您能否用输入中的一些重复数据更新您的问题,以便更清楚您所说的输出没有重复是什么意思?
  • d[key]['object_sale_types'].append(...)
  • "105" 这样的每个键都包含相同的公共字段值,还是可以有不同的值?
  • @Let'stry 是的,除了 id_type_sale 和 sale_type_description 之外,我想在数组中分组的常用字段的值相同
  • @Barmar 关于我理解的数组,但我怎样才能为电子邮件、日期、order_id、商店留下唯一字段?

标签: python arrays json dictionary unique


【解决方案1】:

首先,您需要使用 json.loads 加载 JSON 字符串,然后您可以遍历字典中的每个 (key, value) 对,使用每个 value 对象和数组中的公共值构建一个新字典id_sale_typesale_type_description 的值。然后你可以使用json.dumps输出一个新的JSON:

d = json.loads(j)
r = {}
for key, value in d.items():
    r[key] = { k : value[0][k] for k in ['email', 'date', 'order_id', 'store'] }
    r[key]['object_sales_types'] = [ { 'id_type_sale' : s['id_type_sale'], 'sale_type_description' : s['sale_type_description'] } for s in value]

print(json.dumps(r, indent=4))

输出:

{
    "105": {
        "email": null,
        "date": "2016-05-18",
        "order_id": 105,
        "store": "Ezio store",
        "object_sales_types": [
            {
                "id_type_sale": 2,
                "sale_type_description": "Coffee shop"
            },
            {
                "id_type_sale": 5,
                "sale_type_description": "Book shop"
            }
        ]
    },
    "106": {
        "email": null,
        "date": "2016-05-19",
        "order_id": 106,
        "store": "Ezio store",
        "object_sales_types": [
            {
                "id_type_sale": 3,
                "sale_type_description": "Food"
            },
            {
                "id_type_sale": 8,
                "sale_type_description": "Articles"
            }
        ]
    }
}

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 2019-01-05
    • 2020-12-29
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    相关资源
    最近更新 更多