python - 如何按特定模式对序列中的单词进行排序
问题描述
所以基本上我需要对第一个字符串中的单词进行排序以匹配第二个字符串的顺序。
def sort_string_by_specific_pattern(self, initial_string, expected_string):
#Remove punctuation from strings
initial_string = str(initial_string).translate(None,
string.punctuation)
expected_string = str(expected_string).translate(None,
string.punctuation)
new_sorted_string = " " #we need spaces between words
# map sentences to integer location
spitted = expected_string.split()
d_map = {w: [i for i in range(len(spitted)) if spitted[i] == w]
for w in set(spitted)}
initial_string = initial_string.split()
# sort by calculated location mapping
extracted_sorted = sorted(initial_string, key=d_map.get)
new_sorted_string = str(new_sorted_string.join(extracted_sorted))
return [new_sorted_string, expected_string ]
例如:
initial_string= 'apple one and two apple'
expected_string= 'apple one and apple two'
我想让 initial_string 看起来与 expected_string 完全一样,但主要问题是重复的单词“apple”。
到目前为止我所做的:我有一个字典,它保存为键 = 预期字符串中的单词,值 = 字符串中单词位置的索引
d_map= {'and': [2], 'one': [1], 'apple': [0, 4], 'two': [3]}
但是,当我按此字典对初始字符串进行排序时sorted(initial_string, key=d_map.get)
,结果是:
`new_sorted_string= 'apple apple one and two'`
代替
new_sorted_string= 'apple one and apple two'
解决方案
推荐阅读
- php - Boostrap 下拉错误:示例域。此域用于文档中的说明性示例
- docker - 我将如何设置一个使用 rust 映像编译但依赖于另一个映像的 docker 文件?
- python - 如何计算最大流问题的守恒约束
- c - 如果我没有 time.h 库来执行 srand,如何在 cooja(c 代码)中生成随机浮点值
- openxml - OOXML/DOCX:有人可以向我解释复杂的脚本标签以及它们何时应用吗?
- openiddict - 有没有办法在 OpenIddict 中动态加载声明?
- html - CSS/Masonry -> 跨越多列
- asp.net-core - 模态局部视图 Asp .Net Core 3 中没有验证
- r - 加载 R 包时出错 - libicui18n.so.68:无法打开共享对象文件
- google-calendar-api - 我正在尝试使用 Google Calendar API 读取用户日历事件。在参加者对象中,我只看到少数参与者的“显示名称”