设置字典的元素获取器

18 浏览
0 Comments

设置字典的元素获取器

根据文档的说明,这个方法是有效的:

>>> 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对字典无效(只适用于类?)。我该如何设置一个用于字典的"元素获取器"呢?

0
0 Comments

问题出现的原因是使用了错误的方法来获取字典中的元素。根据timgeb的回答,应该使用itemgetter来获取字典中的元素,而不是使用attrgetter来获取类属性。attrgetter是用来获取通过"."访问的类属性的。

要解决这个问题,可以使用列表推导的方法来实现所需的结果。如下所示:

data = [{'xxx': 'x'}, {'xxx': 'y'}]
[d['xxx'] for d in data]

另外,请注意,从Python 3.x开始,map函数返回的是一个生成器对象而不是一个列表对象。

0
0 Comments

问题的出现原因是因为在使用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获取字典元素时出现的问题。

0