将文件写入字典

时间:2018-11-17 02:36:15

标签: python

我正在接受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

尽管这样做有效,但令人讨厌且过于复杂。我正在尝试提出一种新的方法。

2 个答案:

答案 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

通过涉及列表理解和numpyitertools,有更简洁但更复杂的方法来做到这一点,但这是更高级的主题,应该足够了暂时。

在执行此操作时,当文件中的行数不易被四整除时,您可能会遇到错误-我将让您自己解决问题,因为这是一个有价值的学习经验,而不是太难。

答案 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)