2016-12-03 7 views
0

私は販売された本の量に基づいて人のリストを作成しようとしています。同じ商品を同じ店舗に販売している人のために出力を追加して印刷するPythonコード

データはこのファイル1711.txtで提供されています。

- > david book 05 walmart 
- > emily book 10 kroger 
- > jason food 11 target 
- > david food 20 kroger 
- > eva cloth 13 target 
- > david book 5 walmart 

のような出力が何かする必要があります:ダビデは EVAは
を対象とする13枚の布を販売ウォルマート
に10冊を販売し

ダビデは20食をクルーガーに売った

Eこれまで:

d = {} 
p={} 
q={} 
with open("1711.txt","r") as f: 
    for line in f: 
     a=line.split() 
     l,m,n,o=str(a[0]), str(a[1]), int(a[2]), str(a[3])  
     if l not in d: 
      d[l] = {} 
     if m not in d[l]: 
      d[l][m] = {} 
     if n not in d[l]: 
      d[l][m][n] = {} 
     d[l][m][n]= str(o) 

print(d) 

コードはこの出力を生成する:

{ 
'eva': {'cloth': {13: 'target'}}, 
'david': {'book': {5: 'walmart'}, 'food': {20: 'kroger'}}, 
'emily': {'book': {10: 'kroger'}}, 
'jason': {'food': {11: 'target'}} 
} 

しかし、それは同じ人で同じ店に販売した製品の値を加算していません。必要な出力であるのに対し

デビッド・ブック5ウォルマート

デビッド帳10ウォルマート

+0

コードはreqですPython 3.5で動作するようになった。 – Apple

+0

こんにちは。あなたの質問を編集して、少し読みやすくしました。このサイトでは、可能な限り改善するために質問を編集して再編集することをお勧めします。 –

答えて

0

なし時点で例えば私はとして出力を取得しています値を追加しようとしているので、決して合計を得ることはありません。
データ構造が難しくなります。異なる構造が役立つ可能性があります。 { name : { product { store : total }}}を使用すると、値を簡単に追加できます。

d = {} 
with open(...) as f: 
    for line in f: 
     l,m,n,o = line.strip().split() 
     d.setdefault(l, {}).setdefault(m, {}) 
     d[l][m][o] = d[l][m].get(o, 0) + int(n) 

for name, products in d.items(): 
    for product, stores in products.items(): 
     for store, total in stores.items(): 
      print('{} sold {} {} to {}'.format(name, total, product, store)) 

l, m, n, o = line.strip().split() 

だからコードは次のようになりますこれを考慮:あなただけのタプルを解凍することができ、各ライン上の唯一の4項目がある場合

a=line.split() 
l,m,n,o=str(a[0]), str(a[1]), int(a[2]), str(a[3]) 

は不要です

出力:

eva sold 13 cloth to target 
jason sold 11 food to target 
emily sold 10 book to kroger 
david sold 10 book to walmart 
david sold 20 food to kroger 
+0

ありがとう! – Apple

関連する問題