2016-12-30 4 views
0

私はこれを行うにしようとしています:私の辞書と操作を:この辞書で割り当てPythonの:はAttributeError:「str」はオブジェクトが属性を持っていません「を取得」:ラムダ+地図

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

値:今、この辞書を計算します

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

しかし、私はラインコードの上に入力した後、エラーを取得しています:

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

が、その中に何が悪いのでしょうか?

+4

'dict'は変数か関数ですか?組み込み関数の名前を再利用しないでください! –

答えて

0

辞書dにイテレータとしてアクセスすると、キーを反復処理します。あなたは基本的にここに

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

動作しません。私はPythonで同じことを試みました。 – Chandni

+0

同じエラー:AttributeError: 'str'オブジェクトに属性 'get'がありません。 – Chandni

+1

@Chandniここで、彼は以前あなたがしていたことを教えようとしています。 –

-2

をやっているマップ上のドキュメントです:

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

試してみてください。

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

辞書がiterableであることを確信させるためには、 'for i in d:print(i)'辞書にあるすべてのキーを印刷します。 –

+0

OKフレーズが悪いです。辞書はiterable yesです。しかし、この場合、彼の構文はあなたが辞書のキーにマッピングしていることを意味します。 この場合、彼のxは辞書キーです。このキーは文字列です。私はこれが彼が望んだものだとは思わない。 – bouletta

+0

こんにちは、Bouletta、Yoursは私が見つけた最高の答えです、Mは答えを得ています:.................. >>> map(lambda x:x.get( 'a' (2) 'これで答えを得る:これはDictionary()で動作しません:.........' >>> dict(map()) トレースバック(直近の最後の呼び出し): ファイル、行1、 ファイルタイプ:エラー:できません辞書更新シーケンス要素#0をシーケンス に変換する '結果を辞書に入れたい。 – Chandni

2

あなたがここにmapを使っている理由は、私はよく分かりません。辞書を反復すると、キーだけが文字列になります。ちょうどディクテーションを直接使用してください。あなたはどちらかlambdaを必要としない:あなたがここでやろうとしている何

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

(。コメントで述べたように、あなたは、変数の名前としてdictを使用しないでください)

0

は間違っています。 Pythonでlambdasに辞書を渡すことはできませんし、目的の結果を得ることはできません。操作を実行する代わりに、ここで何が起きているのかを見てみましょう。

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

あなたがそれを見ることができるので、lambdaに渡されるxの値が['a']、ではない私たちのオリジナルの辞書です。これは、辞書をイテレータとして渡すと、keysを反復処理するためです。これをサポートするには、これを試してください。

>>> map(lambda x: x, {1: 'a', 3: 'c'}) 
[1, 3] 

もう1つの方法は、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()にキーワード引数を扱う問題を抱えています。

このように、次のような方法を使用することができます。

>>> dict.get('a').get('b') 
2 
>>> dict['a']['b'] 
2 

また、組み込み関数名に一致する変数名を避けるようにしてください。

+0

あなたの最初の文:マップ(ラムダX:X、辞書) – Chandni

+0

'トレースバック(最新の呼び出しの最後): ファイル ""、1行目は、 TypeError例外で:マップへの引数2()反復 ' – Chandni

+0

をサポートしている必要がありますが@Chandniはその前に辞書を初期化しましたが、別の変数名を使用した場合はそれを渡します。 –

関連する問題