对于作业,我正在创建一个程序,从文件中检索有关奥运国家及其奖牌数的信息。
我的一个功能是以这种格式列出一个列表:
Country,Games,Gold,Silver,Bronze
AFG,13,0,0,2
ALG,15,5,2,8
ARG,40,18,24,28
ARM,10,1,2,9
ANZ,2,3,4,5
该功能需要通过此列表,并存储到一个字典中,国家名称作为键,其余四个条目作为元组。
到目前为止,这是我正在使用的内容:
def medals(string):
'''takes a file, and gathers up the country codes and their medal counts
storing them into a dictionary'''
#creates an empty dictionary
medalDict = {}
#creates an empty tuple
medalCount = ()
#These following two lines remove the column headings
with open(string) as fin:
next(fin)
for eachline in fin:
code, medal_count = eachline.strip().split(',',1)
medalDict[code] = medal_count
return medalDict
现在,意图是使条目看起来像这样
{'AFG': (13, 0, 0, 2)}
相反,我正在
{'AFG': '13,0,0,2'}
它看起来像是存储为字符串,而不是元组。是否与
有关medalDict[code] = medal_count
代码行?我不太确定如何将它转换为整齐的元组的单独整数值。
答案 0 :(得分:2)
您将整个字符串'13,0,0,2'存储为值,因此
medalDict[code] = medal_count
应替换为:
medalDict[code] = tuple(medal_count.split(','))
你原来的想法是正确的,这一行是唯一的例外。改变的是现在它将'13,0,0,2'分成列表['13','0','0','2']并将其转换为元组。
您也可以这样做将内部的字符串转换为整数:
medalDict[code] = tuple([int(ele) for ele in medal_count.split(',')])
但请确保您的medal_count仅包含整数。
答案 1 :(得分:1)
这一行:
code, medal_count = eachline.strip().split(',',1)
... split
strip
时空eachline
ped 1
,','
时间code
,然后将生成的两个字符串存储到{ {1}}和medal_count
...是的,medal_count
包含一个字符串。
您可以采用以下两种方式之一:
沿着以下行添加一行:
split_counts = tuple(medal_count.split(','))
...然后在代码中使用split_counts
或
(在Python 3中)将上面的行更改为
code, *medal_count = eachline.strip().split(',')
...它使用了Extended iterable unpacking(并会给你一个列表,所以如果需要一个元组,它就需要转换)。
答案 2 :(得分:0)
你的问题似乎是这样的:
split(',',1)
# should be
split(',')
因为split(..., 1)
只进行了1次拆分并且split(...)
尽可能地拆分。
所以你应该能够做到这一点:
for eachline in fin:
code, *medal_count = eachline.strip().split(',')
medalDict[code] = medal_count