繁体   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