我正在尝试这样做:我的字典和操作:
dict = {'a': {'b': 2}}
此词典中的赋值:现在计算此词典
dict(map(lambda x:x.get('a').get('b'), dict))
但在输入以上行代码后,我收到错误:
AttributeError: 'str' object has no attribute 'get'
那有什么问题?
答案 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,))