python - 有没有更有效的存储关键字参数的方法?
问题描述
所以这是我的代码:
def formateUserData(FirstName = None, MiddleName = None, LastName = None, DOB = None, Gender = None):
formatedUserData = {}
dataFieldKeys = ['First Name', 'Middle Name', 'Last Name', 'DOB', 'Gender']
dataFieldValues = [FirstName, MiddleName, LastName, DOB, Gender]
for key, value in zip(dataFieldKeys, dataFieldValues):
if value: formatedUserData[key] = value
return formatedUserData
如您所见,关键字参数必须重复 3 次(第 1 行第一次,第 3 行第二次,第 4 行第三次)。有没有办法只存储一次关键字参数就可以做同样的事情?如果可能的话,也许通过使用某种方式遍历关键字参数?顺便说一句,我希望不使用 **kwargs。
解决方案
也许这个划痕会激发您考虑我觉得非常方便的数据类
from dataclasses import dataclass, fields
from datetime import date
from typing import Literal, Optional
@dataclass
class User:
first_name: Optional[str] = None
middle_name: Optional[str] = None
last_name: Optional[str] = None
dob: Optional[date] = None
gender: Optional[Literal['male', 'female']] = None
def not_none_dict(user: User) -> dict:
not_none = {}
for field in fields(user):
value = getattr(user, field.name)
if value:
not_none[field.name] = value
return not_none
print(
not_none_dict(User(
first_name='Joe',
last_name='Doe'
))
)
>>> {'first_name': 'Joe', 'last_name': 'Doe'}
推荐阅读
- mongodb - 使用 Quarkus 进行复杂的 mongodb 查询
- node.js - 如何在nestjs和mongo中正确配置用户角色关系
- pyspark - ModuleNotFoundError:没有名为“pyspark.dbutils”的模块
- scala - 是否可以在 Scala 中将多个 map 和 reduce 函数组合成一次传递?
- android - 如何为导航栏图标设置边距?
- vba - 类似于 Document.Revisions 的集合
- javascript - JavaScript 自动幻灯片放映
- php - 从数据库接收的值在 php 中未正确显示
- java - SSE `this.eventSource.onmessage` 调用失败。错误`“EventSource 的响应具有不是“text/event-stream”的 MIME 类型(“application/json”)
- javascript - 满足 WCAG 2.1 - SC 1.4.13 对工具提示的可忽略要求