python - 如何在Python中将字典列表转换为自定义对象

标签 python

我有一个列表,其中有一些要批量上传的词典。我需要检查列表的元素是否可以转换为自定义对象(如下所示)。有没有像类型比较这样优雅的方法?

这是我的模型

class CheckModel(object):

    def __init__(self,SerialNumber,UID, Guid = None,Date = None):
        self.SerialNumber = SerialNumber
        self.UID = UID
        self.Guid = str(uuid.uuid4()) if Guid is None else Guid
        self.Date = datetime.now().isoformat() if Date is None else Date

这是我的测试数据。如何仅将此列表的第一个元素(因为第一个元素是唯一正确的元素。)转换为 CheckModel 对象?

test = [{
        "Guid":"d0c035a7-0e01-4a37-8fe9-251fb5633fc9",
        "SerialNumber":"1716154A",
        "UID":"F13BDB3B",
        "Date":"2019-12-03T13:50:19.882Z"

    },
    {
        "Guid":"d0585-0e01-4a47-8fe9-251245f33fc9",
        "SerialNumber":"1716154A",
        "Date":"2019-12-03T13:50:19.882Z"
    },
    {
        "Guid":"12414a7-0e01-4a47-8fe9-251245f33fc9",
        "SerialNumber":"1716154A",
        "UID":"F13BDB3B",
        "Date":"2019-12-03"
    }]

最佳答案

您可以创建自定义清理函数,然后使用过滤器

例如:

import datetime
import uuid

class CheckModel(object):

    def __init__(self,SerialNumber,UID, Guid = None,Date = None):
        self.SerialNumber = SerialNumber
        self.UID = UID
        self.Guid = str(uuid.uuid4()) if Guid is None else Guid
        self.Date = datetime.datetime.now().isoformat() if Date is None else Date

#Clean Up Function.             
def clean_data(data):
    if all(key in data for key in ("Guid", "SerialNumber", "UID", "Date")):
        try:
            datetime.datetime.strptime(data["Date"], "%Y-%m-%dT%H:%M:%S.%fZ")
            return True
        except:
            pass
    return False 


test = [{
        "Guid":"d0c035a7-0e01-4a37-8fe9-251fb5633fc9",
        "SerialNumber":"1716154A",
        "UID":"F13BDB3B",
        "Date":"2019-12-03T13:50:19.882Z"

    },
    {
        "Guid":"d0585-0e01-4a47-8fe9-251245f33fc9",
        "SerialNumber":"1716154A",
        "Date":"2019-12-03T13:50:19.882Z"
    },
    {
        "Guid":"12414a7-0e01-4a47-8fe9-251245f33fc9",
        "SerialNumber":"1716154A",
        "UID":"F13BDB3B",
        "Date":"2019-12-03"
    }]

model_data = [CheckModel(**data) for data in filter(clean_data, test)]
print(model_data)

输出:

[<__main__.CheckModel object at 0x0000000002F0AFD0>]

关于python - 如何在Python中将字典列表转换为自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56006317/

相关文章:

Python 错误 "IndentationError: expected an indented block"

python - 检查字符串列表的所有元素是否在字符串中的最快方法

python - PyQt4 问题和在 Python 中登录 WIndow 到主窗口

python - 使用 Python 对 url 进行切片

Python:如何在网页上显示结果?

python - 以匀称的方式沿多线插值每个 X 距离

python - 在 python 中调用 fortran 代码时如何处理全局变量(例如使用 f2py)?

python - Python上的Pusher永远运行

python - 为什么性能会随着数据帧的大小而下降?

python - 使用加法器电路将两个 4 位二进制数相加