我在defaultdict(list)
以下叫cols
:
defaultdict(<class 'list'>,
{1: [{'text': 'Page',
'top': Decimal('83.640')
},{'text': '1,',
'top': Decimal('83.640')
},{'text': 'col',
'top': Decimal('98.040')
},{'text': '1.',
'top': Decimal('98.040')
}],
2: [{'text': 'Page',
'top': Decimal('112.920')
},{'text': '1,',
'top': Decimal('112.920')
},{'text': 'col',
'top': Decimal('132.020')
},{'text': '2.',
'top': Decimal('132.020')
}],
3: [{'text': 'Page',
'top': Decimal('127.560')
},{'text': '1,',
'top': Decimal('127.560')
},{'text': 'col',
'top': Decimal('167.060')
},{'text': '3',
'top': Decimal('167.060')
}]})
我想进行转换,因此对于col
中的每个defaultdict(list)
(1、2和3),如果{{{ 1}}值等于(或在容差范围内)列表中下一个text
字符串的级别。
如果没有,我想添加代表“新行”的内容。
例如,上述列表:
top
到目前为止,这是我的代码:
text
但是,这似乎只是添加了所有元素的新列表(与我的原始元素相同,但没有1,2,3键)。
[0]:
Page 1,
Col 1.
[1]:
Page 1,
Col 2.
[2]:
Page 1,
Col 3.
如上所示,如果current_row = [list(cols.values())[0][0], ] #The first word.
row_list = [current_row,]
for col in cols.values():
for i, word in enumerate(col):
prevWord = col[i - 1]
if i > 0: # skip first word
if abs(prevWord['bottom'] - word['bottom']) <= float(10): #10 is the tolerance level.
#distance is small, use same row
current_row.append(word)
else:
# distance is big, create new row
current_row = [word, ]
row_list.append(current_row)
值在公差级别之内并且为该项目保留了{
[{'text': 'Page 1,',
'top': Decimal('83.640')
},{'text': 'col 1.',
'top': Decimal('98.040')
}],
[{'text': 'Page 1,',
'top': Decimal('112.920')
},{'text': 'col 2.',
'top': Decimal('132.020')
}],
[{'text': 'Page 1,',
'top': Decimal('127.560')
},{'text': 'col 3.',
'top': Decimal('167.060')
}]
}
值,则text
已被串联。
答案 0 :(得分:1)
您的代码中的问题是,当差异在公差范围内时,您就不会串联字符串。您只是制作一个新商品。尝试以下代码:
row_list = []
for col in cols.values():
current_row = [col[0]]
for i, word in enumerate(col):
prevWord = col[i - 1]
if i > 0: # skip first word
if abs(prevWord['top'] - word['top']) <= float(10): #10 is the tolerance level.
#distance is small, use same row
current_row[-1]['text'] += " " + word['text']
else:
# distance is big, create new row
current_row.append(word)
row_list.append(current_row)
current_row = []
print(row_list)