簡體   English   中英

Python-將字典中的值分組

[英]Python - grouping values in dictionary

這是我從Smartsheet API收到的JSON:

{"rows":
    [
        {
            "id":1315072712697732,
            "cells":
            [
                {"columnId":3691535201003396,"value":"MyBooks","displayValue":"MyBooks"},
                {"columnId":8195134828373892},
                {"columnId":876785433896836,"value":"2018 Year","displayValue":"2018 Year"},
                {"columnId":5380385061267332,"value":"http://google.com","displayValue":"http://google.com"}
            ]
        },

        {
            "id":5818672340068228,
            "cells":
            [
                {"columnId":3691535201003396,"value":"MyBooks","displayValue":"MyBooks"},
                {"columnId":8195134828373892},
                {"columnId":876785433896836,"value":"2019 Year","displayValue":"2019 Year"},
                {"columnId":5380385061267332,"value":"http://google.com","displayValue":"http://google.com"}
            ]
        },

        {   
            "id":6381622293489540,
            "cells":
            [
                {"columnId":3691535201003396,"value":"MyMovies","displayValue":"MyMovies"},
                {"columnId":8195134828373892},
                {"columnId":876785433896836,"value":"2027 Year","displayValue":"2027 Year"},
                {"columnId":5380385061267332,"value":"http://google.com","displayValue":"http://google.com"}
            ]
        },
        {
            "id":6100147316778884,
            "cells":
            [
                {"columnId":3691535201003396,"value":"MyMovies","displayValue":"MyMovies"},
                {"columnId":8195134828373892},
                {"columnId":876785433896836,"value":"2035 Year","displayValue":"2035 Year"},
                {"columnId":5380385061267332,"value":"http://google.com","displayValue":"http://google.com"}
            ]
        },
        {
            "id":8351947130464132,
            "cells":
            [
                {"columnId":3691535201003396,"value":"MyHobbies","displayValue":"MyHobbies"},
                {"columnId":8195134828373892},
                {"columnId":876785433896836,"value":"2037 Year","displayValue":"2037 Year"},
                {"columnId":5380385061267332,"value":"http://google.com","displayValue":"http://google.com"}
            ]
        }]}

這是我的python代碼的一部分:

s = json.loads(myJson)
my_dictionary = []
for element in s['rows']:
        my_dictionary.append({'category': element['cells'][0]['displayValue'],
                                        'categoryId': element['cells'][1]['columnId'],
                                        'pages': [
                                            {'pageName': element['cells'][2]['displayValue'],
                                             'pageURL': element['cells'][3]['displayValue']
                                             }
                                        ]})

結果我得到了字典,其中包含我需要的所有數據(沒有所有不必要的東西),除了一件東西。 我想按類別值將其分組。 因此,我要實現的輸出應類似於以下內容:

    "category": "MyMovies",
    "categoryID": "8195134828373892"
    "pages": 
        [
            {"pageName": "2018 Year", "pageURL": "https://google.com"},
            {"pageName": "2019 Year", "pageURL": "https://google.com"}
        ]

我怎樣才能做到這一點?

您可以使用以下代碼進行操作:

from collections import defaultdict

d = defaultdict(list)
for element in my_dictionary:
    d[(element['categoryId'], element['category'])] += element['pages']  # merges all pages into one list
result = []
for element in sorted(d, key=lambda k: k[1]):  # sort by category name
    result.append({
        'category': element[1],
        'categoryId': element[0],
        'pages': sorted(d[element], key=lambda e: e['pageName'])  # sort by page name in pages list
        })
print(result)

暫無
暫無

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

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