我正在学习python的过程中,我喜欢在如此少量的代码中可以完成多少工作,但我对语法感到困惑。我只是试图遍历字典并打印出每个项目和值。
这是我的代码:
words = {}
value = 1
for line in open("test.txt", 'r'):
for word in line.split():
print (word)
try:
words[word] += 1
except KeyError:
#wur you at key?
print("no")
words[word]=1
for item in words:
print ("{",item, ": ", words[item][0], " }")
我当前的打印声明不起作用,我找不到使用多个变量的大型打印语句的好例子。我该如何正确打印?
答案 0 :(得分:1)
您的问题似乎是您尝试打印words[item][0]
,但words[item]
始终是一个数字,并且无法编号。
所以,只是......不要这样做:
print ("{",item, ": ", words[item], " }")
这足以解决它,但有一些方法可以改进这段代码:
print
在每个参数之间放置一个空格,因此当您可能不想要所有这些空格时,您将最终打印{ item : 3 }
。您可以使用关键字参数sep=''
来解决此问题,但更好的解决方案是使用字符串格式或%
运算符。words.items()
代替words
来同时获取密钥和值。setdefault
方法或使用defaultdict
简化整个“存储默认值(如果尚未存在”),或者更简单地说,您可以使用Counter
。with
声明。所以:
import collections
with open("test.txt") as f:
words = collections.Counter(word for line in f for word in line.split())
for item, count in words.items():
print("{%s: %d}" % (item, count))
答案 1 :(得分:0)
你可以使用dict.get
并且可以消除try和except块。
words = {}
for line in open("test.txt", 'r'):
for word in line.split():
print (word)
words[word] = words.get(word,0) +1
for word,count in words.items():
print(word,count)
dict.get
它返回密钥,如果存在于字典中,则默认值为
语法:dict.get(key[,default])
你也可以覆盖__missing__
:
class my_dict(dict):
def __missing__(self,key):
return 0
words = my_dict()
for line in open("test.txt", 'r'):
for word in line.split():
print (word)
words[word] += 1
for word,count in words.items():
print(word,count)
答案 2 :(得分:-1)
在这里迭代字典的最佳方法是按键AND值循环,每次循环时解包键值元组:
for item, count in words.items():
print("{", item, ": ", count, "}")
作为旁注,在构建数组的循环中,实际上并不需要异常处理逻辑。如果密钥不在字典中,字典'get()
方法可以返回默认值,从而将代码简化为:
words[word] = words.get(word, 0) + 1