2016-09-17 30 views
0

我是python的新手,无法弄清楚如何完成此操作。如何从python中的文件中读取时跳过每一行的一部分

假设file.txt的包含以下

iron man 1 
iron woman 2 
man ant 3 
woman wonder 4 

我想读这个文件放到字典在下面的格式

dict = { 'iron' : ['man', 'woman'], 'man' : ['ant'], 'woman' : ['wonder'] } 

也就是说在每行的最后一部分,而写入字典省略。

我的第二个问题是,我可以读取该文件的方式,使得

dict2 = { 'iron' : [('man', '1'), ('woman', '2')], 'man' : [('ant', '3')], 'woman' : [('wonder', '4')] } . 

这就是关键将有2个值,但这些2个值是个别元组的字典。

第二个问题是实现统一成本搜索,这样我可以访问孩子女人和这些孩子是1和2

成本预先感谢您

回答

0

在这里你都去你的问题的部分...作为新的Python只是花一些时间与它喜欢你grilfriend,你就会知道如何它表现为

with open ('file.txt','r') as data: 
    k = data.read() 
    lst = k.splitlines() 

print lst 
dic = {} 
dic2 = {} 
for i in lst: 
    p=i.split(" ") 
    if str(p[0]) in dic.keys(): 
     dic[p[0]].append(p[2]) 
     dic2[p[0]].append((p[1],p[2])) 
    else: 
     dic[p[0]] = [p[1]] 
     dic2[p[0]] = [(p[1],p[2])] 


print dic 
print dic2 
+0

完美:),一个小小的变化是dic [p [0]]。append(p [1])在if循环中。谢谢。 – jack

+0

雅,如果你喜欢它标记upvote和回答@jack – pkm

+1

我没有投票它,但因为我还没有赢得15个声誉我的投票将不会公开 – jack

0

你可以用collections.defaultdict

你第一个回答

import collections.defaultdict 
my_dict = cillections.defaultdict(list) 
with open('your_file') as f: 
    for line in f: 
     line = line.strip().split() 
     my_dict[line[0]].append(line[1]) 

print my_dict 

以上例为例,您可能可以解决第二个问题。

+0

明白了,谢谢。你已经使用line.strip()。split(),但即使line.split()工作,所以为什么额外的电话剥离? – jack

+0

@jack如果这样的作品,你可以接受我的解决方案 – Hackaholic

0

对于第一个问题,你想要做的是阅读每行什么,分割使用它空格和使用一个简单的,如果规则来控制如何将它添加到你的字典:

my_dict = {} 
with open('file.txt', 'r') as f: 
    content = f.read() 

for line in content.split('\n'): 
    item = line.split() 
    if item[0] not in my_dict: 
     my_dict[item[0]] = [item[1]] 
    else: 
     my_dict[item[0]].append(item[1]) 

第二个问题几乎是相同的,只有一个稍微不同的任务:

my_dict2 = {} 
for line in content.split('\n'): 
    item = line.split() 
    if item[0] not in my_dict: 
     my_dict[item[0]] = [(item[1], item[2])] 
    else: 
     my_dict[item[0]].append((item[1], item[2]))   
+0

我越来越IndexError,如果我改变content.split('\ n')content.splitlines()它的作品。不知道你的方式有什么问题,即使我在你的原始代码中打印了项目[0],它包含了有效的列表元素,但仍然出现跟随错误 - 如果项目[0]不在my_dict中: IndexError:列表索引超出范围 – jack

+0

这听起来像没有正确读取文件。 –

相关问题