2016-04-06 19 views
0

クラブ番号に基づいてこれらのデポジットを出力する必要があります。預金の最初の項目を見てください(0434512)。最初の2桁はクラブ番号(この場合はクラブ番号04)を表します。残りの桁は、勘定科目への入金を表します(34512)。それは4 $ 345.12リストに2つのアイテムを追加して1つのアイテムにする

deposits = ["0434512", "03145234", "", "0511112345", "0475746","03654534", "02112"] 
deposits.sort() 

for i in deposits: 
    print i[1], 
    print int(i[2:])/100. 

1 23413.47 
2 1.12 
3 1452.34 
3 6545.34 
4 345.12 
4 757.46 
5 111123.45 

として出力する必要があるので、これを四捨五入する必要があり、私は私がこの完成したと思ったが、私は同じクラブに作られた堆積物を追加する必要があることが判明しました。 1452.34と6545.34をクラブ4と一緒に追加する必要があります。

ありがとうございます!

+2

@BillBEGUERADJ私はちょうどもっと精巧な私のポストを編集しました。 – avbirm

答えて

1

辞書を使用することができます:

deposits = ["0434512", "03145234", "", "0511112345", "0475746","03654534", "02112"] 
deposits.sort() 

from collections import OrderedDict 

mydict = OrderedDict() 

for i in deposits: 
    mydict[i[:2]] = 0 

for i in deposits: 
    mydict[i[:2]] += float(i[2:])/100 

出力:

>>> for i,j in mydict.items(): 
    print(i,j) 


01 23413.47 
02 1.12 
03 7997.68 
04 1102.58 
05 111123.45 

のPython 2:

>>> for i,j in mydict.iteritems(): 
    print i,j 


01 23413.47 
02 1.12 
03 7997.68 
04 1102.58 
05 111123.45 

OrderedDictは、番号順にクラブを維持するために使用されます。 OrderedDict

mydict = OrderedDictmydictと呼ばれる注文の辞書を作成し、Dictionaries

は、ここであなたが興味を持つであろういくつかのリンクです。

for i in deposits: 
    mydict[i[:2]] = 0 

このforループはdepositsの各エントリの最初の2つの文字を使用してキーを生成します。私。クラブ番号。それはすべてのクラブに最初に0という値を与えます。

for i in deposits: 
    mydict[i[:2]] += float(i[2:])/100 

この第二forループはdepositsを通過し、mydictの対応するキーの値に2文字目の後にすべてのものを追加します。これは、辞書が同じ名前の2つのキーを持つことができないためにのみ機能します。

ご理解いただければ幸いです。辞書がどのように機能するかを理解すれば、それは比較的簡単です。

+0

彼らがどのように追加されているのか分かりません。これをもう少し理解してもらえますか?私はあなたが少し精緻化したらマークをチェックします:) – avbirm

+0

@avbirm私の答えを編集しました。 –

+0

私はそれを感謝します。わかりやすくコードが短かったので、私は答えとしてマークを付けました。他の答えも良いものでした。あなたは私の好意を持ち、私のポストをupvoteできますか?それは私がより多くの質問を投稿して担当者を得ることができるように助けます。ありがとうございます - アレン – avbirm

3

辞書の仕事をするために、リストを使用しないでください:

dictionary_repr = {} 
for item in deposits: 
    if item in dictionary_repr: 
     # clump the clubs earnings to gain total earnings 
     dictionary_repr[int(item[1])] += int(item[2:]/100.00) 
    else: 
     # create the first instance of earnings 
     dictionary_repr[int(item[1])] = int(item[2:]/100.00) 

今、あなただけの辞書を反復処理し、あなたの結果を印刷することができます

for club, amount in dictionary_repr.items(): # or iteritems in Py 2.7 
    print(club, amount) # or print club, amount in Py 2.7 
+1

クラブ番号が9より大きい場合、クラブ番号に '' item [:2] '' 'を使うことを検討することができます - これはOP仕様と同意します。 – wwii

3

私はあなたがあなたのクラブの番号を変換すべきだと思いますintですが、コードに基づいたソリューションはこのようになります

from collections import defaultdict 

deposits = ["0434512", "03145234", "", "0511112345", "0475746", "03654534", "02112"] 

summary = defaultdict(float) 

for i in deposits: 
    summary[i[:2]] += int(i[2:])/100. 

#sort by club number 
sorted_summary = sorted(summary.items(), key=lambda item: item[0]) 

for key, value in sorted_summary: 
    print key, value 

#1 23413.47 
#2 1.12 
#3 7997.68 
#4 1102.58 
#5 111123.45 
+0

もし私がnew_lst = [int(i [2:])/ 100を使うならば。私は預金のために]私は、new_lstのintにカバーされた預金リストのリストを持っています。私はそこから何をするだろうか?あなたは私がintに変換する必要があると言ったので、 – avbirm

+0

@avbirm私はclub_idについて言いました。文字列の使用は辞書順ソートを引き起こし、間違った順序になる可能性があります。 "1,11,12,2,20" – vitalii

関連する問題