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