我有一个看起来像这样的文本文件......
3:degree
54:connected
93:adjacent
54:vertex
19:edge
64:neighbor
72:path
55:shortest path
127:tree
3:degree
55:graph
64:adjacent and so on....
我希望我的函数读取每行文本,并将其拆分为冒号,使其成为字典,其中单词处于“键”位置,页码位于我的字典的“值”位置 - 然后我将不得不创建一个新的字典并扫描每个单词,如果它已经在字典中,只需添加它后面的页码,如果它不在字典中,我会将它添加到字典中。
到目前为止,这是我的想法......
def index(fileName):
inFile=open(fileName,'r')
index={}
for line in inFile:
line=line.strip() #This will get rid of my new line character
word=line[1]
if word not in index:
index[word]=[]
index[word].append(line)
return index
fileName='terms.txt'
print(index(fileName))
我在正确的页面上,但需要一些帮助才能开始。
答案 0 :(得分:0)
修改我使用# edit
def index(fileName):
inFile=open(fileName,'r')
index={}
for line in inFile:
line=line.strip().split(':',1) # edit
word,index=line # edit
if word not in index:
index[word]=[]
index[word].append(index) # edit
return index
答案 1 :(得分:0)
你没有分割线,你只是把角色放在第1位。
使用.split(':', 1)
在<{1}}上分割行 :
:
您可能希望使用集合来避免两次添加相同的页码。您还可以使用def index(filename):
with open(filename) as infile:
index = {}
for line in infile:
page, word = map(str.strip, line.split(':', 1))
index.setdefault(word, []).append(int(page))
return index
进一步简化此操作:
collections.defaultdict
这给出了:
from collections import defaultdict
def index(filename):
with open(filename) as infile:
index = defaultdict(set)
for line in infile:
page, word = map(str.strip, line.split(':', 1))
index[word].add(int(page))
return index
输入文字; defaultdict(<type 'set'>, {'neighbor': set([64]), 'degree': set([3]), 'tree': set([127]), 'vertex': set([54]), 'shortest path': set([55]), 'edge': set([19]), 'connected': set([54]), 'adjacent': set([64, 93]), 'graph': set([55]), 'path': set([72])})
是defaultdict
的子类,其行为与普通字典相似,但它会为您尝试访问但尚未存在的每个键创建一个新的dict
。< / p>
答案 2 :(得分:0)
您可以使用str.split
将字符串分隔为令牌。在您的情况下,分隔符为:
。
records = """3:degree
54:connected
93:adjacent
54:vertex"""
index = {}
for line in records.split('\n'):
page, word = line.split(':')
index[word] = int(page.strip())
index
# {'vertex': 54, 'connected': 54, 'adjacent': 93, 'degree': 3}
在某些时候,您需要处理具有多个页面引用的单词。为此,我建议您创建一个collections.defaultdict
,其中list
为默认值:
from collections import defaultdict
index = defaultdict(list)
index[word].append(page) # add reference to this page