Python列表理解和小写

2024-10-03 17:17:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大小写混合的字典。我不想把所有的东西都改成小写,但我想做的是使用字典理解得到的值,但这些值是小写的。你知道吗

EmployeeIDs = [Employee.get('externalEmployeeId', '') for Employee in activeEmployees]

目前,这是返回混合情况下,在雇员ID的结果。我知道我可以使用一个更传统的for循环,但是我很好奇我是否也可以将它转换成小写。我不能把.lower()放在paren后面,因为它可以返回不支持小写的None。在这个特殊的例子中,我可以用“”来代替“”,但在我看来,我应该可以用某种表达式来代替。明白吗?你知道吗


Tags: inidforget字典employee情况传统
3条回答

试试这个,如果结果是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]

如果要删除所有Noneid,请改用生成器函数(这比附加到列表的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))

相关问题 更多 >