2017-02-13 17 views
0

次のように私は辞書とセットを持っている:Pythonの辞書のキー

fundprices = { 
'A' : 20, 
'B' : 20, 
'C' : 10, 
'D' : 15, 
'E' : 10, 
'F' : 15, 
'G' : 35, 
'H' : 20, 
'I' : 10, 
'J' : 5 
} 

dollaramount = { 
100000.0, 
100000.0, 
50000.0, 
300000.0, 
50000.0, 
100000.0, 
100000.0, 
150000.0, 
50000.0, 
0 
} 

そして、私は次のように、辞書で割っセットの結果である第三の辞書を作成しようとしていますコード:orderamountは、ファンドの価格と同じキーを持つ

orderamount = [] 

for i in fundprices.key(), dollaramount.key(): 
    orderamount.append(dollaramount[i]/fundprices[i]) 

print orderamount 

。しかし、私は 'dict'オブジェクトを取得しているため、結果として属性がありません。この場合、dollaramountは2つの辞書の別の計算から作成されたセットです。セットされた金額が作成されたときに鍵を追加するほうが簡単な場合は、私に知らせてください。これをどうやって解決するのですか?

+6

2番目のオブジェクトは辞書ではありません。それはセットです。 –

+4

実際には、それもセットではありません - そこに余分な閉じ括弧があります。また、私はあなたが2番目に分割している、ゼロで分割エラーを得るつもりです。 – SiHa

+2

'dollaramount'は' fundprices'にどのように関係していますか?思い出して、辞書は順不同です。 –

答えて

0
from collections import OrderedDict 
fundprices = { 
    'A' : 20, 
    'B' : 20, 
    'C' : 10, 
    'D' : 15, 
    'E' : 10, 
    'F' : 15, 
    'G' : 35, 
    'H' : 20, 
    'I' : 10, 
    'J' : 5 
    } 

dollaramount = [ 
    100000.0, 
    100000.0, 
    50000.0, 
    300000.0, 
    50000.0, 
    100000.0, 
    100000.0, 
    150000.0, 
    50000.0, 
    0] 
ordered_fundprices = OrderedDict(sorted(fundprices.items())) 
for i, j in zip(ordered_fundprices.keys(), dollaramount): 
    print i, j 

for i, j in zip(ordered_fundprices.itervalues(), dollaramount): 
    print j/i 

このような結果が欲しかったですか?

A 100000.0 
B 100000.0 
C 50000.0 
D 300000.0 
E 50000.0 
F 100000.0 
G 100000.0 
H 150000.0 
I 50000.0 
J 0 
5000.0 
5000.0 
5000.0 
20000.0 
5000.0 
6666.66666667 
2857.14285714 
7500.0 
5000.0 
0 
+0

あなたはこの動作に依存することはできません - 辞書は順序付けされておらず、異なる実行/異なるpythonバージョンなどでランダムな結果を与えるでしょう。脇に、 'dict'キーを反復するために' keys'メソッドを使う必要はありません。自動的に発生し、Python 2では非効率で、Python 3では不要で冗長です。 –

+0

いいえ、結果は常に同じです。キーの順序は、このオブジェクトの生存期間の終わりまで一度指定されているためです。そして私は同意します、それは注文されていません。このループを3番目のものとして実行したときの同じ順序に注意してください。 'i、j for zip(fundprices.itervalues()、dollaramount): print j/i a.append(j/i)' 'for i 、j in zip(fundprices.keys()、a): print i、j' –

+0

しかし、コードを実行するまでは、どの比率を得ることができるのか分かりません。* OPがランダム比率を望んでいるとは思いません。だから、辞書を修正しない限り、同じ結果が得られますが、その結果がどうなるかは分かりません*辞書は順序がないので*です。 –

0

利用list代わりのdollaramountとしてset実際にeuqals、

set([0, 50000.0, 100000.0, 150000.0, 300000.0]) 

その後、あなたはキーがあったことが順序を記憶していた辞書を持っているしたい場合は、我々は、

orderamount = [amount/t[1] for amount, t in zip(dollaramount, sorted(fundprices.items()))] 

print(orderamount) 
# [5000.0, 5000.0, 5000.0, 20000.0, 5000.0, 6666.666666666667, 2857.1428571428573, 7500.0, 5000.0, 0] 

を持っています最初に挿入したら、collections.OrderedDictを使用します。

+0

正直なところ、結果を 'sorted(fundprices.items())'を 'OrderedDict'に入れるのは意味がありません。その後、' items'を繰り返し処理します。 'sortd(fundprices.items ()) '直接... –

+0

@ juanpa.arrivillaga、thx。私は読みやすさのためにそれをしました。とにかく、私はちょうど私の答えを更新しました。 – SparkAndShine