以下内容读取包含以下条目的文本文件:
Emma Woodhouse,Package
Emma Woodhouse,Letter
Emma Woodhouse,Letter
我已将文本转换为列表以将其拆分为逗号,然后创建一个词典以将每个人作为键并将每个项目作为值传递给他们。所以下面的代码会产生:
{'Emma Woodhouse': ['Letter', 'Letter', 'Package']}
我的问题在于计算每种类型项目的出现次数,因此当用户使用“艾玛·伍德豪斯”查询字典时,我希望它能够打印出来:
2 Letters
1 Package
在我遇到大于1(!)的多个条目的问题之前,我很难根据需要获取信息。任何帮助将不胜感激!
mail_list = []
for entry in open ('mail.txt'):
listed = entry.strip().split(',')
mail_list.append(listed)
import collections
mail_dict = collections.defaultdict(list)
for person, package in mail_list:
mail_dict[person].append(package)
name = input('Name: ')
for name in mail_dict:
for item in mail_dict.values():
count = 0
for individual in item:
count += 1
print(count, individual)
我知道上面的内容很可能非常丑陋' - 请多多包涵!它打印太多行和错误的总数:/
答案 0 :(得分:2)
您可以使用Counter
模块中的collections
。
In [1]: from collections import Counter
In [2]: mail_dict = {'Emma Woodhouse': ['Letter', 'Letter', 'Package']}
In [3]: [Counter(mail_dict[key]) for key in mail_dict]
Out[3]: [Counter({'Letter': 2, 'Package': 1})]
答案 1 :(得分:1)
尝试使用列表方法count
:
a = [1, 1, 1, 2, 2, 3, 4, 4, 4,]
a.count(1) == 3
a.count(2) == 2
a.count(3) == 3
a.count(4) == 3
您还需要使用name
中的input('Name: ')
来访问字典,而不是迭代它:
name = input('Name: ')
for item_list in mail_dict[name]:
# count items
答案 2 :(得分:0)
这对我有用,试一试
import collections
def parse(mail_dict):
return {i:dict(collections.Counter(mail_dict[i])) for i in mail_dict.keys()}
答案 3 :(得分:0)
这是我的方法:
import sys
file = open(sys.argv[-1], "r").read()
wordictionary={}
for word in file.split():
if word not in wordictionary:
wordictionary[word] = 1
else:
wordictionary[word] += 1
sortable = [(wordictionary[key], key) for key in wordictionary]
sortable.sort()
sortable.reverse()
for member in sortable: print (member)