我想在将数据保存到数据库之前创建一个管道,以避免重复的条目
例如
1. 364 Lane Debs
2. 364 Debs Lane
3. 365 Lane Debs
4. 364 debs lane
现在条目1,2,4与改组后的单词相同,其中3有不同的数字,因此它表示不同的地址。
请建议我采取行动
答案 0 :(得分:0)
正则表达式不是针对此问题的可扩展和优化方法。相反,您可以使用frozenset
版本的分割单词作为字典的键,以便保存行而不管其单词的顺序,并使用str.lower()
忽略区分大小写。此外,为了跟踪您是否可以保留索引的实际行。
In [1]: s = """ 1. 364 Lane Debs
...: 2. 364 Debs Lane
...: 3. 365 Lane Debs
...: 4. 364 debs lane"""
In [8]: lines = s.splitlines()
In [9]: {frozenset(line.lower().split()[1:]):ind for ind, line in enumerate(lines)}
Out[7]: {frozenset({'364', 'debs', 'lane'}): 3,
frozenset({'365', 'debs', 'lane'}): 2}
或者,您可以保存线条而不是索引:
In [10]: {frozenset(line.lower().split()[1:]):line for ind, line in enumerate(lines)}
Out[10]:
{frozenset({'364', 'debs', 'lane'}): ' 4. 364 debs lane',
frozenset({'365', 'debs', 'lane'}): ' 3. 365 Lane Debs'}
答案 1 :(得分:0)
data = [
{'address': 364, 'words': 'Lane Debs'},
{'address': 364, 'words': 'Debs Lane'},
{'address': 365, 'words': 'Lane Debs'},
{'address': 364, 'words': 'debs lane'},
]
unique = {
(d['address'], tuple(sorted(d['words'].casefold().split()))): d
for d in data
}.values()
这会产生(在我的机器上):
[{'address': 365, 'words': 'Lane Debs'},
{'address': 364, 'words': 'debs lane'}]
你的下一个问题是决定哪些重复的条目是“正确的”'之一。