在课堂实验中,我们要阅读一个文本文件,其中一行一行地包含世界杯冠军的国家名、年份、队长和教练,我们要用这些国家名作为关键词来编一本字典。
我本来想在字典里做一个字典,以国家名为键,然后在那个键下有一个键/值对,分别是胜利,年份,队长,教练。
def main():
inFile = open('world_cup_champions.txt', 'r')
champions = createDict(inFile)
printChamps(champions)
def createDict(file):
dict = {}
try:
for line in file:
line = (line.strip()).split(",")
dict[line[1]] = {}
dict['Wins'] = 0
for word in line:
if (word == dict[line[1]]):
dict['Wins'] += 1
dict['Year(s)'] = line[0]
dict['Captain'] = line[2]
dict['Coach'] = line[3]
return (dict)
except Exception as e:
print(e)
def printChamps(unsorted_dict):
print(f"{'Country':10} {'Wins':5} {'Year':32} {'Captain':72} {'Coach':30}\n")
sorted_dict = dict(sorted(unsorted_dict.items()))
for key in sorted_dict:
print ("%-10s | %2i | %-30s | %-70s | %-50s" % (key, sorted_dict[key]['Wins'], sorted_dict[key]['Year(s)'], sorted_dict[key]['Captain'], sorted_dict[key]['Coach']))
if __name__ == '__main__':
main()
这就是我现在所拥有的,但我在createDict中制作字典时感到困惑。下面是文本文件的外观:
Year,Country,Coach,Captain
1930,Uruguay,Alberto Suppici,Jose Nasazzi
1934,Italy,Vittorio Pozzo,Gianpiero Combi
1938,Italy,Vittorio Pozzo,Giuseppe Meazza
1950,Uruguay,Juan Lopez,Obdulio Varela
1954,Germany,Sepp Herberger,Fritz Walter
1958,Brazil,Vicente Feola,Hilderaldo Bellini
1962,Brazil,Aymore Moreira,Mauro Ramos
1966,England,Alf Ramsey,Bobby Moore
1970,Brazil,Mario Zagallo,Carlos Alberto
1974,Germany,Helmut Schon,Franz Beckenbauer
1978,Argentina,Cesar Luis Menotti,Daniel Passarella
1982,Italy,Enzo Bearzot,Dino Zoff
1986,Argentina,Carlos Bilardo,Diego Maradona
1990,Germany,Franz Beckenbauer,Lothar Matth�us
1994,Brazil,Carlos Alberto Parreira,Dunga
1998,France,Aime Jacquet,Didier Deschamps
2002,Brazil,Luiz Felipe Scolari,Cafu
2006,Italy,Marcello Lippi,Fabio Cannavaro
2010,Spain,Vicente del Bosque,Iker Casillas
2014,Germany,Joachim Low,Philipp Lahm
我想打印一个格式,列出国家的名字,他们有多少胜利,与他们赢得了几年。
以下是预期输出:
6条答案
按热度按时间xkftehaa1#
也许调用pandas库和groupy方法会有帮助。
sulc1iza2#
使用
csv.DictReader
。通过给出正确的数据 * 分隔符 *,你会得到一个字典的迭代器...如果第一行给出了列的名称,它们将是键。n1bvdmb63#
如果你不想自己格式化表格,最好使用许多可用的python库之一。另外,最好的方法可能是使用
pandas
库,它允许你轻松地对数据进行排序并按国家分组。如果您不想使用任何库,下面的解决方案应该可以帮助您。它创建一个字典来保存国家/地区的详细信息,然后使用循环在最后格式化表格。您可能需要更新表格的格式。
输出
irtuqstp4#
这个解决方案利用了pandas库的dataframe功能。
可以简化为:
输出:
uqzxnwby5#
建议一:使用
pandas
如果允许使用
pandas
,则可以[使用
.sort_index()
而不是.sort_values('Wins', ascending=False)
按国家的字母顺序而不是大多数胜利排序行。]champions
看起来像打印输出将是
建议二:无
pandas
一个一个三个一个一个一个一个一个四个一个一个一个一个一个五个一个
champions
看起来与pandas
解决方案相同,但打印输出看起来更接近您的问题中描述的the desired output:如果你
printChamps
中的默认lenRef
更改为{'Years':30,'Captains':70,'Coaches':50}
(当前已注解掉),main
命名为printChamps
,比如printChamps(champions, Years=30,Captains=70,Coaches=50)
,那么打印出来的结果就像
uyhoqukh6#
这可能是一个可能的解决方案。
图纸: