使用字典理解将字典中的所有键转换为小写

uwa*_*345 3 python dictionary

我写了一个函数将字典中的所有键转换为小写:

def lower_dict_keys(some_dict):
    """Convert all keys to lowercase"""
    result = {}
    for key, value in some_dict.items():
        if type(key) == str:
            result[key.lower()] = value
        else:
            result[key] = value
    return result
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.然后我想,嗯,这在词典理解中会更优雅,所以这就是我提出的:

def lower_dict_keys2(some_dict):
    return {key.lower(): value for key, value in some_dict.items() if type(key) == str}
Run Code Online (Sandbox Code Playgroud)

这仅适用于所有键都是字符串的情况.我有数字键,它们被丢弃:

d1 = {'A':'foo', 'b':'bar', 1:'zip'}

print(lower_dict_keys(d1))

>>>{'a': 'foo', 'b': 'bar', 1: 'zip'}

print(lower_dict_keys2(d1))

>>>{'a': 'foo', 'b': 'bar'}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:是否可以将此函数编写为字典理解?

Mar*_*ers 5

将代码正确翻译为理解是:

{key.lower() if type(key) == str else key: value for key, value in some_dict.items()}
Run Code Online (Sandbox Code Playgroud)

使用条件表达式确定每个键值对的键.

使用if for环路滤波器上的元素; 那些未通过if测试的元素不包含在输出中.

你也想避免使用type(...) is,isinstance()改用; 子类也str将支持该lower()方法:

{key.lower() if isinstance(key, str) else key: value for key, value in some_dict.items()}
Run Code Online (Sandbox Code Playgroud)