0

各埋め込みディクショナリの値の合計を計算する次のコードを記述しました。各埋め込みディクショナリについて、それらの値に対応するキーも保持したいと考えています。たとえば、以下に示すように、20+30+40 = 90 であることを知りたいのですが、loan1、loan2、loan3 というキーも保持し、それらの値がそれぞれ 20、30、40 であることを知りたいので、新しい辞書を作成できること。

私はこれを 3 つの for ループで書きましたが、もっと簡潔にできると思います。また、これを数回実行しましたが、埋め込まれた辞書の値を出力する for ループと、埋め込まれた辞書のキーを記録する for ループが毎回同じ順序で繰り返されます。書かれていることを保証します。

mydict = {'k1':{'loan1':20,'loan2':30, 'loan3':40},'k2':{'loan1':90,'loan2':65, 'loan3':75}}

for k in mydict.keys():

    the_sum = 0

    for c in mydict[k].itervalues():
        the_sum += c

        print k, c, the_sum

    for k2 in mydict[k].iterkeys():
        print k2

k2 75 75

k2 65 140

k2 90 230
loan3

loan2

loan1

k1 40 40

k1 30 70

k1 20 90

loan3

loan2

loan1
4

3 に答える 3

2

合計を印刷したいだけですか?または、合計を辞書の新しいフィールドとして追加しますか?特定のキーの合計が必要な場合は、次のように実行できます。

In [1]: mydict = {'k1':{'loan1':20,'loan2':30, 'loan3':40},'k2':{'loan1':90,'loan2':65, 'loan3':75}}

In [2]: for k, v in mydict.iteritems():
   ...:     print k, sum(v.values())
   ...:
   ...:
k2 230
k1 90

また、元の情報をすべて保持します。各フィールドにを追加する場合は、次のtotal操作を実行できます。

In [3]: for k, v in mydict.iteritems():
   ...:     v['total'] = sum(v.values())
   ...:
   ...:

In [4]: mydict
Out[4]:
{'k1': {'loan1': 20, 'loan2': 30, 'loan3': 40, 'total': 90},
 'k2': {'loan1': 90, 'loan2': 65, 'loan3': 75, 'total': 230}}
于 2012-11-23T23:27:32.963 に答える
1

各キーのローンの価値を合計しようとしている場合は、次のようなdictの理解を使用できます。

mydict = {'k1':{'loan1':20,'loan2':30, 'loan3':40},
          'k2':{'loan1':90,'loan2':65, 'loan3':75}}

totals = {key:sum(loans.values()) for key, loans in mydict.items()}
print(totals)

収量

{'k2': 230, 'k1': 90}

Python2.6以前を使用している場合は、代わりにリスト内包totals表記を使用してdictを作成できます。

totals = dict((key,sum(loans.values())) for key, loans in mydict.items())
于 2012-11-23T23:27:48.067 に答える
1

あなたの質問を完全に理解しているかどうかはわかりません。辞書の合計を取得する場合は、 for ループをリスト内包表記と sum() に置き換えることができます

>>> mydict = {'k1':{'loan1':20,'loan2':30, 'loan3':40},'k2':{'loan1':90,'loan2':65, 'loan3':75}}
>>> sum([x for x in mydict['k1'].itervalues()])
90
>>> sum([x for x in mydict['k2'].itervalues()])
230

これにより mydict は変更されないままになるため、キー/値は保持されます。また、python 辞書はunorderedです。キーを保持したい場合は、python の collections.ordereddict を調べてください。

于 2012-11-23T23:29:22.047 に答える