构造字典 python_python中的字典构造

据我所知,你需要的是每个单词的行列表,而不仅仅是遇到该单词的最后一行。如果是这样,那么word_map应该是从单词到行号列表的映射,而不仅仅是单个行号的映射。因此,为单词添加行号的行现在是word_map[word]+=[line_no]。为了避免写defaultdict部分,使用了defaultdict而不是一个简单的字典。在

下面是一个工作版本:import string, collections

def build_word_index():

input_file=(input('file name: '))

input_file_open=open(input_file,'r')

word_map = collections.defaultdict (list)

line_no = 0

w=[]

for line in input_file_open:

word_lst = line.strip().split()

word_lst = [w.lower().strip(string.punctuation) for w in word_lst]

w.append(word_lst)

for word in word_lst:

word_map[word]+=[line_no]

line_no+=1

print(word_map)

index_lst = sorted(list(word_map.items()))

print(index_lst)

for word, line_set in index_lst:

line_lst = sorted(list(line_set))

line_str = str( line_lst[0] )

for line_no in line_lst[1:]:

line_str += ", {}".format( line_no )

print("{:14s}:".format(word), line_str )

input_file_open.close()

build_word_index()

输入示例:

^{pr2}$

输出示例:file name: defaultdict(, {'one': [0, 2], 'three': [1, 1, 3], 'two': [0, 2], 'four': [1, 2, 3]})

[('four', [1, 2, 3]), ('one', [0, 2]), ('three', [1, 1, 3]), ('two', [0, 2])]

four : 1, 2, 3

one : 0, 2

three : 1, 1, 3

two : 0, 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值