2016-09-17 28 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

這聽起來像沒有正確讀取文件。 –

相關問題