从字典列表中获取值列表
问题的原因是需要从一个包含多个字典的列表中提取特定键的值列表。解决方法是使用列表推导式或使用字典的get方法。
使用列表推导式的代码如下:
[x['value'] for x in list_of_dicts]
使用字典的get方法的代码如下:
[d.get('value') for d in dict_list]
然而,在讨论中提到了一个错误的方法`d.getkey('value')`。正确的方法是`d.get('value')`。这与第二个列表推导式的作用相同,而不是Michal提供的解决方法。
之后有人指出,使用get方法时,如果键不存在,将会返回None(或者我们指定的默认值)。这与使用列表推导式时会抛出异常的情况相比,更好一些。
因此,解决这个问题的最佳方法是使用列表推导式或使用字典的get方法,后者在键不存在时会返回None或指定的默认值。
问题出现的原因是需要从一个列表中的字典中获取一个特定键的值的列表。解决方法有以下几种:
1. 使用map()和lambda函数:
>>> map(lambda d: d['value'], l)
其中l是列表。
2. 如果键'value'可能不存在,可以使用以下代码:
>>> map(lambda d: d.get('value', 'default value'), l)
3. 使用operator模块和lambda函数的替代方法:
>>> import operator >>> get_value = operator.itemgetter('value') >>> map(get_value, l)
4. 创建一个函数来实现上述功能:
>>> import operator, functools >>> get_value = operator.itemgetter('value') >>> get_values = functools.partial(map, get_value) >>> get_values(l)
在Python 3中,由于map()返回一个迭代器,可以使用list()将其转换为列表,例如:
list(map(operator.itemgetter('value'), l))
总之,列表推导式在这里更加合理。如果要使用第一个map()函数,应使用operator.itemgetter('value')而不是lambda函数。
问题出现的原因是需要从一个包含多个字典的列表中获取特定键的值。解决方法是使用列表推导式来提取值。
以下是解决该问题的代码示例:
假设每个字典都有一个'value'键,你可以写成(假设列表的名称为'l'):
[d['value'] for d in l]
如果'value'可能不存在,可以使用以下代码:
[d['value'] for d in l if 'value' in d]
如果要处理键的缺失值,还可以使用d.get("key_to_lookup", "alternate_value")。代码如下:
[d.get('value', 'alt') for d in l]
如果'value'不作为键存在,它将返回'alt'。
这种"魔法"被称为列表推导式。列表推导式是一种在Python中创建新列表的简洁方式。
这个方法真的很好用!我一直在寻找解决SQLAlchemy对象的类似问题的方法。现在它像这样工作:[d.value for d in l],谢谢你 🙂
这里应该是用d['Value']而不是d['value']。