2016-12-03 3 views
1

Mein Anliegen ist in Bezug auf meinen Code nicht in Python 3.5 ausgeführt wird, läuft es perfekt in Python 2.7.Gruppierung basierend auf Person, Artikel und Geschäft

Die Frage ist, wir zu einer Gruppe müssen die Inhalte auf Basis von:

  1. Person
  2. Artikel
  3. store

Der Inhalt in der Datei 1511.txt sind:

david book 8 walmart 
mike book 5 kroger 
david food 3 walmart 
mary food 11 target 

Ausg ut:

'mike': 5, 'mary': 11, 'david': 11 
'food': 14, 'book': 13 
'kroger': 5, 'walmart': 11, 'target': 11 
mike 5 
mary 11 
david 11 
number of items sold by mike is 5 
number of items sold by mary is 11 
number of items sold by david is 11 
total number of food sold 14 
total number of book sold 13 
total number of items sold by kroger is 5 
total number of items sold by walmart is 11 
total number of items sold by target is 11 

Wenn ich versuche, das gleiche Programm in Python 3.5, es die folgenden Ausgang mit dem Fehler gegeben auszuführen:

'mike': 5, 'david': 11, 'mary': 11 
'food': 14, 'book': 13 
'target': 11, 'walmart': 11, 'kroger': 5 
Traceback (most recent call last): 
    File "C:\Users\putch\AppData\Local\Programs\Python\Python35\1511prognew.py", line 20, in <module> 
    print(str(d.keys()[i]+" "+str(d.values()[i]))) 
TypeError: 'dict_keys' object does not support indexing 

Das ist mein Code ist, wie kann ich diesen Code ändern laufen in Python 3.5?

d={} 
p={} 
q={} 
with open("1511.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]) 
     d.setdefault(l,[]).append(n) 
     p.setdefault(m,[]).append(n) 
     q.setdefault(o,[]).append(n) 

d=dict((key,sum(val)) for key,val in d.items()) 
p=dict((keys,sum(values)) for keys,values in p.items()) 
q=dict((keys,sum(values)) for keys,values in q.items()) 
print (d) 
print (p) 
print (q) 

for i in range(0,len(d)): 
    print(str(d.keys()[i]+" "+str(d.values()[i]))) 

for i in range(0,len(d)): 
    print("number of items sold by "+d.keys()[i]+" is " +str(d.values()[i])) 

for j in range(0,len(p)): 
    print("total number of "+str(p.keys()[j])+" sold "+str(p.values()[j])) 

for j in range(0,len(q)): 
    print("total number of items sold by "+str(q.keys()[j])+" is "+str(q.values()[j])) 
+0

Wenn Sie "Python 3.7" sagen, können wir davon ausgehen, dass Sie "Python 3.5" meinen? –

+0

Entschuldigung, ich habe Python 3,5 – Apple

Antwort

0

dict.keys() gibt nicht länger eine Liste, einen einfacheren Weg, um die Druckanweisungen zu schreiben dies wäre:

for k, v in d.items(): 
    print("{} {}".format(k,v)) 

Alternativ können Sie nur list(dict.keys()) verwenden, aber die Methode habe ich gezeigt, ist mehr klar.

+0

Das hat funktioniert :) Vielen Dank! – Apple

+0

Hallo, können Sie mir bitte helfen mit einem weiteren Code: – Apple

+0

http://stackoverflow.com/questions/40943990/python-code-to-find-all-persons-based-on-qty-of-books-sold/40944072 # 40944072 – Apple

Verwandte Themen