2016-08-21 13 views
3

私はPython 2.7を使用していますが、まだ辞書について学んでいます。私は辞書の数値計算を行うことに集中しており、何か助けが必要です。辞書の値を二乗する

私は辞書を持っていると私はそれに値を二乗したいと思います:

dict1 = {'dog': {'shepherd': 5,'collie': 15,'poodle': 3,'terrier': 20}, 
'cat': {'siamese': 3,'persian': 2,'dsh': 16,'dls': 16}, 
'bird': {'budgie': 20,'finch': 35,'cockatoo': 1,'parrot': 2} 

私が欲しい:

dict1 = {'dog': {'shepherd': 25,'collie': 225,'poodle': 9,'terrier': 400}, 
'cat': {'siamese': 9,'persian': 4,'dsh': 256,'dls': 256}, 
'bird': {'budgie': 400,'finch': 1225,'cockatoo': 1,'parrot': 4} 

私が試した:私は持っていなかった

dict1_squared = dict**2. 

dict1_squared = pow(dict,2.) 

dict1_squared = {key: pow(value,2.) for key, value in dict1.items()} 

を私の試みで成功した。

+1

あなたは(2つのレベルの深さ)は、ループを反復処理する必要があります。その後、それ自体で時間を稼ぐ必要があります。 –

答えて

3

あなたは辞書理解と非常に接近していました。問題は、ソリューション内のが辞書自体であるため、繰り返し処理する必要があります。

dict1_squared = {key: {k: pow(v,2) for k,v in value.items()} for key, value in dict1.items()} 
4

それはあなたが辞書を入れ子になっているためだ、見て:

results = {} 

for key, data_dict in dict1.iteritems(): 
    results[key] = {key: pow(value,2.) for key, value in data_dict.iteritems()} 
5

私はループを好むかもしれない、これらの例の一つ:あなたの質問に基づいて

for d in dict1.values(): 
    for k in d: 
     d[k] **= 2 
1

私はチュートリアルを介して動作するために良いアイデアだと思います。 Here is one from tutorialspoint。あなたは辞書を二乗しようとしていると言いましたが、それはあなたがしようとしていることではありません。あなたは辞書内の値を2乗しようとしています。辞書内の値を2乗するには、まず値を取得する必要があります。 Pythonのforループはこれを助けることができます。

# just an example 
test_dict = {'a': {'aa': 2}, 'b': {'bb': 4}} 

# go through every key in the outer dictionary 
for key1 in test_dict: 

    # set a variable equal to the inner dictionary 
    nested_dict = test_dict[key1] 

    # get the values you want to square 
    for key2 in nested_dict: 

     # square the values 
     nested_dict[key2] = nested_dict[key2] ** 2 
0

あなたの構造はなかれあなたがこの方法を行うことができます同じ場合:

for k,w in dict1.items(): 
    for k1,w1 in w.items(): 
     print w1, pow(w1,2) 

20 400 
1 1 
2 4 
35 1225 
5 25 
15 225 
20 400 
3 9 
3 9 
16 256 
2 4 
16 256