簡體   English   中英

從 OrderedDict 中移除 {}

[英]remove {} from OrderedDict

我使用下面給出的 taskIdSerializer 創建數據的方法:

def to_representation(self, instance):
        result = super(taskIdSerializer, self).to_representation(instance)
        result = OrderedDict([(key, result[key]) for key in result if result['date']])
        return result

這個結果在我下面給出的函數中返回:

[
    {
        "description": "asdsa",
        "priority_id": 3,
        "name": "tetst",
        "date": [
            {
                "dates": "20/09/2021 15:14:00",
                "id": 146
            },
            {
                "dates": "20/09/2021 15:14:00",
                "id": 145
            }
        ]
    },
    {}, // this is value add dict when date = []
    {}  // this is value add dict when date = []
]

我想刪除 {} 對象,我想得到這樣的返回數據:

[
        {
            "description": "asdsa",
            "priority_id": 3,
            "name": "tetst",
            "date": [
                {
                    "dates": "20/09/2021 15:14:00",
                    "id": 146
                },
                {
                    "dates": "20/09/2021 15:14:00",
                    "id": 145
                }
            ]
        }
    ]

對我來說,你所擁有的看起來不像 OrderedDict。 OD 通常表示為元組對列表。 您正在顯示字典列表。

如果你的列表總是有兩個元素長,那么你可以說

result.pop()

它從列表中刪除最后一個元素。

你可以說得更緊一點:

if result[-1] == {}:
    result.pop()

但是,總的來說,我認為您需要返回並更深入地了解您正在生成的輸出。

更新:

我必須承認,我仍然沒有看到您獲得的數據是如何來自 OrderedDict,至少不是來自 collections.OrderedDict。 但是,無論如何,您有一個字典列表,並且您想擺脫空字典。 所以,事情很簡單:

result # from before
pared_result = [d for d in result if d != {}]

或者有些人可能會說以下內容更“Pythonic”:

pared_result = [d for d in result if not d]

如果列表result的元素總是字典,那么上面的兩個是等價的。 但是,如果元素可以不是字典,則上述兩者將有所不同。

上述修改后的答案都使用了一種稱為列表理解的強大形式。 這是添加到您的實用腰帶的絕佳工具。 :)

使用pop()函數刪除。

暫無
暫無

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

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