计算一个人收到的信件和包裹的数量-Python
我的程序应该读入一个名为mail.txt的文件,如下所示:计算一个人收到的信件和包裹的数量-Python,python,string,Python,String,我的程序应该读入一个名为mail.txt的文件,如下所示: Jane Fairfax,Letter Frank Churchill,Letter Emma Woodhouse,Letter Frank Churchill,Letter Harriet Smith,Package Emma Woodhouse,Letter Philip Elton,Package Emma Woodhouse,Package Name: Emma Woodhouse 2 Letters 1 Package 我
Jane Fairfax,Letter
Frank Churchill,Letter
Emma Woodhouse,Letter
Frank Churchill,Letter
Harriet Smith,Package
Emma Woodhouse,Letter
Philip Elton,Package
Emma Woodhouse,Package
Name: Emma Woodhouse
2 Letters
1 Package
我的程序应该是这样工作的:
Jane Fairfax,Letter
Frank Churchill,Letter
Emma Woodhouse,Letter
Frank Churchill,Letter
Harriet Smith,Package
Emma Woodhouse,Letter
Philip Elton,Package
Emma Woodhouse,Package
Name: Emma Woodhouse
2 Letters
1 Package
这是我的代码:
q = input("Name: ")
p = open("mail.txt", "r")
name_list = p.readlines()
lista = {}
for i in name_list:
i = i[:-1]
name_list = i
我不知道下一步该怎么做。有什么建议吗?谢谢 首先,我们可以使用列表理解来解析文件本身
In [1]: with open("mail.txt") as file:
...: items = [item.split(',') for item in file.read().split('\n')[:-1]]
...:
In [2]: items
Out[2]:
[['Jane Fairfax', 'Letter'],
['Frank Churchill', 'Letter'],
['Emma Woodhouse', 'Letter'],
['Frank Churchill', 'Letter'],
['Harriet Smith', 'Package'],
['Emma Woodhouse', 'Letter'],
['Philip Elton', 'Package'],
['Emma Woodhouse', 'Package']]
然后,我们可以使用另一种理解来确定属于特定人的项目
In [3]: received = [kind for (name, kind) in items if name == recipient]
In [4]: received
Out[4]: ['Letter', 'Letter', 'Package']
然后,我们可以使用计数器
来计算收到的每个项目的数量
In [5]: from collections import Counter
In [6]: Counter(received)
Out[6]: Counter({'Letter': 2, 'Package': 1})
In [7]: totals = dict(Counter(received))
In [8]: totals
Out[8]: {'Letter': 2, 'Package': 1}
最后,我们可以使用for
循环以所需的格式显示此内容
In [9]: print("Name:", recipient)
...: for (item, count) in totals.items():
...: print(count, item)
...:
Name: Emma Woodhouse
2 Letter
1 Package
首先,我们可以使用列表理解来解析文件本身
In [1]: with open("mail.txt") as file:
...: items = [item.split(',') for item in file.read().split('\n')[:-1]]
...:
In [2]: items
Out[2]:
[['Jane Fairfax', 'Letter'],
['Frank Churchill', 'Letter'],
['Emma Woodhouse', 'Letter'],
['Frank Churchill', 'Letter'],
['Harriet Smith', 'Package'],
['Emma Woodhouse', 'Letter'],
['Philip Elton', 'Package'],
['Emma Woodhouse', 'Package']]
然后,我们可以使用另一种理解来确定属于特定人的项目
In [3]: received = [kind for (name, kind) in items if name == recipient]
In [4]: received
Out[4]: ['Letter', 'Letter', 'Package']
然后,我们可以使用计数器
来计算收到的每个项目的数量
In [5]: from collections import Counter
In [6]: Counter(received)
Out[6]: Counter({'Letter': 2, 'Package': 1})
In [7]: totals = dict(Counter(received))
In [8]: totals
Out[8]: {'Letter': 2, 'Package': 1}
最后,我们可以使用for
循环以所需的格式显示此内容
In [9]: print("Name:", recipient)
...: for (item, count) in totals.items():
...: print(count, item)
...:
Name: Emma Woodhouse
2 Letter
1 Package
你很接近。你想使用你创建的字典来记录你读过的所有名字以及每个人收到的邮件类型。以下是我的想法:
tenants = {}
def print_mail(name):
if name in tenants:
print 'Name: {}'.format(name)
print '{} Letters'.format(tenants[name]['Letter'])
print '{} Packages'.format(tenants[name]['Package'])
else:
print 'Name not found'
def read_mail_file():
# Using the with statement creates a file object and
# automatically closes it for you when the statement exits
with open('mail.txt', 'r') as infile:
for line in infile.readlines():
# Convert the line into an array split by commas
line = line.strip().split(',')
name = line[0]
mail_type = line[1]
# If you have not already seen this person then
# create an embedded dictionary to keep track of their mail
if name not in tenants:
tenants[name] = {'Letter': 0, 'Package': 0}
# Then, just update the type of mail they received on this
# line
tenants[name][mail_type] += 1
if __name__ == "__main__":
read_mail_file()
print_mail('Emma Woodhouse')
你很接近。你想使用你创建的字典来记录你读过的所有名字以及每个人收到的邮件类型。以下是我的想法:
tenants = {}
def print_mail(name):
if name in tenants:
print 'Name: {}'.format(name)
print '{} Letters'.format(tenants[name]['Letter'])
print '{} Packages'.format(tenants[name]['Package'])
else:
print 'Name not found'
def read_mail_file():
# Using the with statement creates a file object and
# automatically closes it for you when the statement exits
with open('mail.txt', 'r') as infile:
for line in infile.readlines():
# Convert the line into an array split by commas
line = line.strip().split(',')
name = line[0]
mail_type = line[1]
# If you have not already seen this person then
# create an embedded dictionary to keep track of their mail
if name not in tenants:
tenants[name] = {'Letter': 0, 'Package': 0}
# Then, just update the type of mail they received on this
# line
tenants[name][mail_type] += 1
if __name__ == "__main__":
read_mail_file()
print_mail('Emma Woodhouse')
这是你的解决方案
import collections
y=[]
with open('mail.txt') as infile:
counts = collections.Counter(l.strip() for l in infile)
for line, count in counts.most_common():
y.append(line + ',' + str(count))
line=input("Name: ")
for i in y:
if line == str(i).split(',')[0]:
print(str(i).split(',')[2] + ' ' + str(i).split(',')[1])
这是你的解决方案
import collections
y=[]
with open('mail.txt') as infile:
counts = collections.Counter(l.strip() for l in infile)
for line, count in counts.most_common():
y.append(line + ',' + str(count))
line=input("Name: ")
for i in y:
if line == str(i).split(',')[0]:
print(str(i).split(',')[2] + ' ' + str(i).split(',')[1])
我投票将此问题作为离题题结束,因为SO不是家庭作业完成服务。我投票将此问题作为离题结束,因为SO不是家庭作业完成服务。