2016-01-22 54 views
1

我对python非常陌生,我试图创建能够完成我手工完成的所有工作的循环。本质上创建所有线“#”变量,并从文件“game_catch.txt”其内容是这样的分配他们的文本的特定行:如何将变量添加到带有循环的字典中?

Curving     10 
Dodgeball    15 
Keep Away    5 
Kin-Ball    7 
Prisoner Ball   21 
Quidditch    30 
Rundown (aka Pickle) 12 
Yukigassen    18 
Handball    25 

(随着空间是标签,如果使任何差异)

然后创建另一个环来分配线“#”变量STR“#”变量而分裂所有的间距远的值。 (我无法修改该文件,因为在其他电脑上它将与我上面发布的文件相同,所以我必须这样做)

然后,更重要的是,因为这是我完全卡住的地方,做转动STR“#”变量弄成的所有细节问题工作循环中的体育词典可以拿起,然后读作{“弯”:10}

在这里,我提供的代码我目前正在使用并试图简化:

file = open('game_catch.txt','r') 
line1 = file.readline() 
line2 = file.readline() 
line3 = file.readline() 
line4 = file.readline() 
line5 = file.readline() 
line6 = file.readline() 
line7 = file.readline() 
line8 = file.readline() 
line9 = file.readline() 

str1 = line1.split() 
str2 = line2.split() 
str3 = line3.split() 
str4 = line4.split() 
str5 = line5.split() 
str6 = line6.split() 
str7 = line7.split() 
str8 = line8.split() 
str9 = line9.split() 

sports = {} 

key = '' 
for i in str1[0:-1] : 
    key += i + ' ' 

key = key[0:-1] 

sports[key] = int(str1[-1]) 

对不起,很长的文章,我只是想提供尽可能多的细节。随时让我知道是否有更有效的方法来做到这一点。谢谢

+1

您可能想看看[官方Python教程](https://docs.python.org/3.4/tutorial/index.html),特别是关于[控制流](https:/ /docs.python.org/3.4/tutorial/controlflow.html)。 – TigerhawkT3

+0

你能否提供一个txt文件中的whats的例子,以便我们可以复制并粘贴它来测试? – Simon

+0

为什么你需要将所有行读入不同的变量? –

回答

1

下面将打开你的txt文件转换成一个字典,考虑到一些体育名字是由多个单词:

lines = [line.rstrip('\n').split() for line in open('C:/Users/Simon/Desktop/test.txt')] 

sports = {} 

for el in lines: 
    number = el.pop() 
    curItem = ' '.join(el) 

    sports[curItem] = int(number) 

print sports 

这将会给这样的事情:

{'Curving': 10, 'Keep Away': 5, 'Dodgeball': 15} 
+1

有关多字词名称的好消息;我没有阅读整个样本输入并错过了它。我建议'sports [curItem] = int(number)'获得一个整数值。 – TigerhawkT3

0
file = 'game_catch.txt' 
sports = {} 

with open(file) as f: 
for line in f: 
    parts = line.split() 
    sports[parts[0]] = int(parts[-1]) 

希望这可以帮助。

+1

顺便说一句,你不需要'lines = f.readlines()',只需要'在f:部分在'with'块中。 – TigerhawkT3

+0

感谢您的评论,我编辑了我的答案。 – Tobias

2

你可以得到一个基本的结构,通过遍历文件,分割每行,并发送该发电机对来dict()(这将让分数为字符串):

with open('game_catch.txt') as f: 
    d = dict(line.rsplit(maxsplit=1) for line in f) 

,就可以把分数作为整数通过创建一个发电机来分割每行,然后拆包每一行,并使用int()功能:

with open('game_catch.txt') as f: 
    d = dict((name, int(score)) for name, score in (line.rsplit(maxsplit=1) for line in f)) 

您可以使用,而不是dict()功能字面理解语法:

with open('game_catch.txt') as f: 
    d = {name:int(score) for name, score in (line.rsplit(maxsplit=1) for line in f)} 

最重要的部分,当然,检查出的教程,让你可以了解这些代码段正在做的和做的解释意义。循环和数据结构尤为重要。

+0

我喜欢使用发生器。我通常创建一个单元列表来迭代,所以我可以处理并获取命名变量。发电机很整洁。 –

0

实施例在这里

trans_dict = { '一个': '瓦希德', '2': 'itnen', '3': '塔拉塔'}

 print "ITER ITEMS", trans_dict.iteritems() 

     for key, val in trans_dict.iteritems(): 

        print "KEY", key 

        print "VAL", val 
+0

除了打印示例词典之外,这似乎没有任何其他功能。这有什么帮助? – TigerhawkT3

相关问题