设置字典的元素获取器
设置字典的元素获取器
根据文档的说明,这个方法是有效的:
>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)] >>> list(map(operator.itemgetter(1), inventory)) [3, 2, 5, 1]
现在我想要对一个字典列表做类似的操作:
>>> data = [{'xxx': 'x'}, {'xxx': 'y'}] >>> list(map(operator.attrgetter('xxx'), data)) Traceback (most recent call last): File "", line 1, in AttributeError: 'dict' object has no attribute 'xxx'
我预期的结果是:
['x', 'y']
但是似乎attrgetter
对字典无效(只适用于类?)。我该如何设置一个用于字典的"元素获取器"呢?
问题的出现原因是因为在使用itemgetter获取字典中的元素时,代码中使用了属性访问(dot notation)的方式,而itemgetter只适用于列表或元组元素的访问,即使用整数索引的情况。
解决方法是使用字典的getitem方法,可以通过在字典上调用getitem方法并传递要获取的键来实现相同的功能。
下面是解决该问题的示例代码:
from operator import itemgetter data = [{'xxx': 'x'}, {'xxx': 'y'}] result = map(lambda x: x.__getitem__('xxx'), data) print(list(result)) # 输出 ['x', 'y']
通过在map函数中使用lambda函数的方式,将每个字典对象传递给getitem方法获取键为'xxx'的值,并将结果保存在列表中。
这样就可以解决使用itemgetter获取字典元素时出现的问题。