我想在将数据保存到数据库之前创建一个管道,以避免重复的条目
例如
1. 364 Lane Debs
2. 364 Debs Lane
3. 365 Lane Debs
4. 364 debs lane现在条目1,2,4与混洗的单词相同,其中3具有不同的数字,因此它表示不同的地址。
请给我建议一下
发布于 2018-04-22 16:41:43
对于这个问题,正则表达式并不是一种可伸缩性很强的优化方法。相反,您可以使用拆分单词的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'}发布于 2018-04-22 16:41:51
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'}]你的下一个问题是判断哪个重复的条目是“正确的”条目。
https://stackoverflow.com/questions/49963999
复制相似问题