我刚刚开始学习Python,对于我的项目,我们需要获取一个文件并创建一个表,在一列中列出团队名称,并在另一列中使用标题获胜,并按字母顺序排列,并且必须使用set方法。作为旁注,我所上课是一场彻底的灾难,我们甚至从未报道过这些信息,所以我提前为我的无知道歉。谢谢。
我不相信这是set方法。
inputFile = open('WorldSeriesWinners.txt', 'r')
lineList = inputFile.readlines()
for line in sorted(lineList):
sorted (inputFile)
print(line.rstrip())
答案 0 :(得分:0)
所以这可能不是这个特定问题的最快或最敏捷的解决方案,但我通常做这样的事情。
def ReadCsv(fileToRead,colDelim = ",", rowDelim = "\n"):
fileHandle = open(fileToRead,"r")
fileContent = fileHandle.read()
fileLines = fileContent.split(rowDelim)
fileAsListOfLists = [k.split(colDelim) for k in fileLines]
return fileAsListOfLists
答案 1 :(得分:0)
所以你有一个像这样的文件:
Yankees
Redsox
Yankees
Cardinals
Dodgers
Redsox
Yankees
你需要这个:
Yankees 3
Redsox 2
Dodgers 1
Cardinals 1
首先,我仍然不明白你在这里如何使用set
。你想要计算东西,但set
中的项目是唯一的,所以它对计算项目出现的次数没用。你可能想要使用dict
。请注意,在您阅读文件时,对它进行排序是没用的,因为dict
无法排序:
winners = {}
for team_name in open('WorldSeriesWinners.txt'):
team_name = team_name.strip() # get rid of the newlines
winners[team_name] = winners.get(team_name, 0) + 1
team_name
是密钥,winners.get(team_name, 0)
将返回该团队的值,除非尚未添加,在这种情况下它将返回0
。您将1
添加到已存在的值,并将新值重新放回winners
。在为每一行执行此操作后,您将获得类似{"Yankees":3, "Dodgers":1, ... }
的词典。或者,你可以使用一个为你计数的模块。
https://docs.python.org/3.3/library/stdtypes.html#dict.get https://docs.python.org/3.3/library/collections.html#collections.Counter
这就是你如何解决问题的第一部分。第二部分,您需要将其重新转换为可以排序的列表。 winners.items()
会为您提供[("Yankees", 3), ("Dodgers", 1) ... ]
https://docs.python.org/3.3/library/stdtypes.html#dict.items
sorted
可以使用key
参数来告诉它在每个项目上查看什么来决定它的去向,这就是告诉它如何查看胜利次数。
https://docs.python.org/3/library/functions.html#sorted
要在列中打印出来,请查看format
,这样可以确保每列具有相同的空间量
https://docs.python.org/3/library/functions.html#format
我认为您会发现链接文档中的示例将是您问题其余部分的良好起点。