首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查字符串中的混洗单词,避免重复输入

检查字符串中的混洗单词,避免重复输入
EN

Stack Overflow用户
提问于 2018-04-22 16:30:33
回答 2查看 39关注 0票数 1

我想在将数据保存到数据库之前创建一个管道,以避免重复的条目

例如

代码语言:javascript
运行
复制
 1. 364 Lane Debs
 2. 364 Debs Lane
 3. 365 Lane Debs
 4. 364 debs lane

现在条目1,2,4与混洗的单词相同,其中3具有不同的数字,因此它表示不同的地址。

请给我建议一下

EN

回答 2

Stack Overflow用户

发布于 2018-04-22 16:41:43

对于这个问题,正则表达式并不是一种可伸缩性很强的优化方法。相反,您可以使用拆分单词的frozenset版本作为字典的键,以便保存行,而不管它们的单词顺序,并使用str.lower()忽略区分大小写。另外,为了跟踪实际的行数,你可以保留索引。

代码语言:javascript
运行
复制
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}

或者,您可以保存行,而不是索引:

代码语言:javascript
运行
复制
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'}
票数 0
EN

Stack Overflow用户

发布于 2018-04-22 16:41:51

代码语言:javascript
运行
复制
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()

这会产生(在我的机器上):

代码语言:javascript
运行
复制
[{'address': 365, 'words': 'Lane Debs'},
 {'address': 364, 'words': 'debs lane'}]

你的下一个问题是判断哪个重复的条目是“正确的”条目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49963999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档