簡體   English   中英

如何從字典列表中具有相同鍵的連接值中獲取嵌套數據?

[英]how to get a nested data from Concatenate values with same keys in a list of dictionaries?

我有 all_writing_test_name_data

all_writing_test_name_data=    
      [
          {
            "id": 1,
            "book_name": Math,
            "writing_test_description": "string",
            "subject_id": 1,
            "book_id": 2,
            "writing_test": "string"
          },
          {
            "id": 2,
            "book_name": Math-1,
            "writing_test_description": "string-1",
            "subject_id": 1,
            "book_id": 2,
            "writing_test": "string-1"
          }
        ]

我想像這樣連接 all_writing_test_name_data

 [
  {
    "subject_id": 1,
    "writing_items": [
      {
            "id": 1,
            "book_name": Math,
            "writing_test_description": "string",
            "book_id": 2,
            "writing_test": "string"
          },
          {
            "id": 2,
            "book_name": Math-1,
            "writing_test_description": "string-1",
            "book_id": 2,
            "writing_test": "string-1"
          }
    ]
  }
]

我已經嘗試過了,但我認為代碼中缺少一些我無法獲得所需數據的代碼

    x=all_writing_test_name_data
    

    # printing original list
    print("The original list is : " + str(x))
    
    import operator
    from functools import reduce
    all_keys = reduce(operator.or_, (d.keys() for d in x))

    bar = {key: [d.get(key) for d in x] for key in all_keys}

    print('bar',bar['writing_test']+bar['writing_test_description'])


    from collections import Counter
    result = Counter()
    for d in x:
        result[d['writing_test']] = d['writing_test']
        result[d['writing_test_description']] = d['writing_test_description']
    print(result)

    z=bar['writing_test']+bar['writing_test_description']

    print bar

但我無法獲得我想要的數據。 我怎樣才能得到完全相同的數據,有什么錯誤

您可以按每個dictsubject_id屬性對輸入數據進行分組,然后將該數據重新格式化為您想要的值:

from collections import defaultdict

groups = defaultdict(list)
for test in all_writing_test_name_data:
    subject_id = test.pop('subject_id')
    groups[subject_id].append(test)

result = [ { 'subject_id' : k, 'writing_items' : v } for k, v in groups.items() ]

Output:

[
    {
        "subject_id": 1,
        "writing_items": [
            {
                "id": 1,
                "book_name": "Math",
                "writing_test_description": "string",
                "book_id": 2,
                "writing_test": "string"
            },
            {
                "id": 2,
                "book_name": "Math-1",
                "writing_test_description": "string-1",
                "book_id": 2,
                "writing_test": "string-1"
            }
        ]
    }
]

請注意,這將改變all_writing_test_name_data的值(由於test.pop() )。 如果不需要,請添加

test = test.copy()

pop之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM