Python:AttributeError:' str'对象没有属性' get&#39 ;: Lambda + Map

时间:2016-12-30 18:18:02

标签: python dictionary lambda

我正在尝试这样做:我的字典和操作:

dict = {'a': {'b': 2}}

此词典中的赋值:现在计算此词典

dict(map(lambda x:x.get('a').get('b'), dict))

但在输入以上行代码后,我收到错误:

AttributeError: 'str' object has no attribute 'get'

那有什么问题?

4 个答案:

答案 0 :(得分:2)

我不确定你为什么在这里使用map。迭代字典只为你提供了键,它们是字符串。只需直接使用dict;你不需要lambda

my_dict.get('a').get('b')

(如评论中所述,您不应该使用dict作为变量的名称。)

答案 1 :(得分:0)

当您访问字典d作为迭代器时,您将遍历键。你基本上是在做

dict(map(lambda x:x.get('a').get('b'), ['a']))

答案 2 :(得分:0)

你在这里想做的是错的。您无法在Python中将字典传递给lambdas并获得所需的结果。而不是执行任何操作,让我们看看这里发生了什么。

>>> dict = {'a': {'b': 2}}
>>> map(lambda x: x, dict)
['a']

所以你可以看到,传递给x的{​​{1}}的值是lambda,而不是我们原来的字典。这是因为当您将字典作为迭代器传递时,您将遍历['a']。为了支持这一点,试试这个。

keys

您可以想到的另一种选择是传递>>> map(lambda x: x, {1: 'a', 3: 'c'}) [1, 3] 。让我们尝试使用lambdas并使用keyword arguments来获得所需的结果。

map

糟糕,在这种情况下>>> map(lambda x:x.get('a').get('b'), **dict) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: map() takes no keyword arguments 在处理关键字参数时遇到问题。

所以你可以使用下面提到的替代方法。

map()

另外,请尝试避免使用与某些内置函数名称匹配的变量名称。

答案 3 :(得分:-2)

这是地图上的文档:

https://docs.python.org/2/library/functions.html#map

尝试:

map(lambda x:x.get('a').get('b'), (dict,))