2016-12-03 81 views
1

我的关注是关于我的代码没有在python 3.5中运行,它在python 2.7中运行得非常好。基于人,物品和商店分组

的问题是,我们需要对内容进行分组依据:

  1. 项目

文件1511.txt中的内容是:

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

输出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 

当我尝试运行在Python 3.5相同的程序,它给出了下面的错误输出:

'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 

这是我的代码,我怎么能修改此代码运行在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

当你说“Python 3.7”时,我们是否假设你的意思是“Python 3.5”? –

+0

对不起,我的Python 3.5 – Apple

回答

0

dict.keys()不再返回一个列表,写的打印语句应该是这样一个简单的方法:

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

或者你可以只使用list(dict.keys()),但我发现的方法更明确。

+0

这工作:)非常感谢你! – Apple

+0

嗨,你能帮我一个更多的代码: – Apple

+0

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

相关问题