首页 > 解决方案 > 如何按特定模式对序列中的单词进行排序

问题描述

所以基本上我需要对第一个字符串中的单词进行排序以匹配第二个字符串的顺序。

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'

标签: python

解决方案


推荐阅读