我正在接受CSC 110项目。我正在尝试使用词典进行作业,即使我们还没有学会它们。
我有一个国家档案,它们以几行换行符赢得了几枚奖牌。例如:
Afghanistan
0
0
0
Albania
0
0
0
Algeria
0
2
0
该国之后的每一条线都是他们从金牌开始一直到铜牌获得的奖牌。
我想将它们存储在字典中,其结构看起来像这样。 dict = {阿富汗:[0,0,0],阿尔巴尼亚:[0,0,0]}
我有什么:
olympic_stats = {}
fileIn = open('test.txt', 'r')
line = fileIn.readline()#Initialize Loop
counter = 0
while line != '':
if counter == 4:
counter = 0
if counter%4 == 0:#First Pass, COUNTRY
country_name = line.rstrip()
elif counter%4 == 1:#Second Pass, GOLD
gold_medals = int(line)
elif counter%4 == 2:#Third Pass, SILVER
silver_medals = int(line)
else: #Fourth Pass, BRONZE
bronze_medals = int(line)
#update Counter
counter += 1
if counter == 4:
olympic_stats[country_name] = [gold_medals, silver_medals, bronze_medals]
line = fileIn.readline()#Update Loop
尽管这样做有效,但令人讨厌且过于复杂。我正在尝试提出一种新的方法。
答案 0 :(得分:1)
您的循环很笨拙-您可以做得更好。例如,您可以
file.readlines()
)我在这里完成的操作
olympic_stats = {}
fileIn = open('test.txt', 'r')
fileLines = fileIn.readlines()
counter = 0
while counter < len(fileLines):
country_name = fileLines[counter]
gold_metals = fileLines[counter + 1]
silver_metals = fileLines[counter + 2]
bronze_metals = fileLines[counter + 3]
olympic_stats[country_name] = [gold_medals, silver_medals, bronze_medals]
counter += 4
通过涉及列表理解和numpy
或itertools
,有更简洁但更复杂的方法来做到这一点,但这是更高级的主题,应该足够了暂时。
在执行此操作时,当文件中的行数不易被四整除时,您可能会遇到错误-我将让您自己解决问题,因为这是一个有价值的学习经验,而不是太难。
答案 1 :(得分:1)
虽然您的回答不是很简洁,但每个发言者的回答并不“不好”。我可能会做这样的事情:
olympic_stats = {}
while line:
line_str = line.rstrip()
if line_str[0].isalpha():
country = line_str
olympic_stats[country] = []
else:
olympic_stats[country].append(line_str)