我有一个列表和一个集合,我想从列表中的集合中查找某个元素的所有出现,并将字符串放在集合中单词的左右两侧。
我现在写的是:
unique_set = set(text)
context_key = {}
bad_counter = 0
for i,j in enumerate(unique_set):
context_list = []
if j in text:
context = []
context.append(text[i-1])
context.append(text[i])
context.append(text[i+1])
if j in context:
context_list.append(context)
context_key[j] = context_list
else:
bad_counter += 1
print(bad_counter)
print(context_key)
这似乎实际上遍历了集合和列表,但是我在其中放置了计数器,以查看缺少的值没有累加多少,因为全文列表的长度约为130k,所以15k的丢失应该是不好的,但是曾经只有3 k,v对让我失望。这是输出:
15928
{'compost': [['gardens', 'compost', 'heaps']], 'extra': [['color', 'hair', 'extra']], 'commercial': [['commercial', 'first', 'came']]}
这样做的最终目标是将集合中的唯一值作为dict键添加到context_key
以及包含该值作为dict值的任何列表的后面。context_key
考虑到uniqueset
您声明的内容仅是set
输入的内容,因此预先构建它只会使您的代码进行更多可避免的迭代。我会避免先构建set
,而只是迭代获取的值。
通过调用以下方法的keys()
方法,您可以轻松地从以下过程的输出字典中检索相同的唯一数据。
而且,在python list
O(n)中插入时,我也会避免使用它们。使用具有恒定访问权限的数据结构dict
可以使工作更快。
这是避免这些陷阱的解决方案。
def parse(input_file):
with open(f'{input_file}', 'r') as f:
data = f.read().split()
size = len(data)
indexes = dict()
for i, x in enumerate(data):
if x not in indexes:
indexes[x] = dict()
indexes[x][i] = (data[i-1]if i>0 else None, data[i+1]if i<size-2 else None)
return indexes
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句