Python列表理解和小写

问题描述 投票:0回答:3

我有一个具有混合大小写值的字典。我不想将所有内容更改为小写,但我想要做的是使用字典理解来获取值,但将这些值设置为小写。

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

目前,这是在EmployeeIDs结果中返回混合大小写。我知道我可以去一个更传统的for循环 - 但我很好奇我是否可以将这个转换为小写。我不能只在paren之后放入.lower()因为它可以返回不支持小写的None。我可以在这个特定情况下加上''而不是''但在我看来我应该能够在这里放一些表达而不仅仅是.get?

python
3个回答
1
投票

试试这个,如果结果是None它会放一个空字符串:

EmployeeIDs = [Employee.get('externalEmployeeId', '').lower() if Employee.get('externalEmployeeId', '') is not None else "" for Employee in activeEmployees]

2
投票

''是一个空字符串,而不是None,一个空字符串仍然有你可以调用的lower()方法。使用or运算符将None条目默认为''

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

会工作。


0
投票

您可以编写要在列表解析中使用的自定义函数:

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))
© www.soinside.com 2019 - 2024. All rights reserved.