我有一个具有混合大小写值的字典。我不想将所有内容更改为小写,但我想要做的是使用字典理解来获取值,但将这些值设置为小写。
EmployeeIDs = [Employee.get('externalEmployeeId', '') for Employee in activeEmployees]
目前,这是在EmployeeIDs结果中返回混合大小写。我知道我可以去一个更传统的for循环 - 但我很好奇我是否可以将这个转换为小写。我不能只在paren之后放入.lower()因为它可以返回不支持小写的None。我可以在这个特定情况下加上''而不是''但在我看来我应该能够在这里放一些表达而不仅仅是.get?
试试这个,如果结果是None
它会放一个空字符串:
EmployeeIDs = [Employee.get('externalEmployeeId', '').lower() if Employee.get('externalEmployeeId', '') is not None else "" for Employee in activeEmployees]
''
是一个空字符串,而不是None
,一个空字符串仍然有你可以调用的lower()
方法。使用or
运算符将None
条目默认为''
:
EmployeeIDs = [(Employee.get('externalEmployeeId') or '').lower() for Employee in activeEmployees]
会工作。
您可以编写要在列表解析中使用的自定义函数:
def get_lowercase_external_id(e):
try:
return e.get('externalEmployeeId', '').lower()
except AttributeError: # 'NoneType' object has no attribute 'lower'
return None
EmployeeIDs = [get_lowercase_external_id(Employee) for Employee in activeEmployees]
如果您想要删除所有None
ID,请使用生成器函数(这比附加到列表的for循环更有效):
def get_lowercase_external_ids(es):
for e in es:
try:
yield e.get('externalEmployeeId', '').lower()
except AttributeError:
continue
EmployeeIDs = list(get_lowercase_external_ids(activeEmployees))