给出如下声明:“印度是一个伟大的国家,我会努力 为了使我们的国家成为更好的印度”,我想订购独特的词 首先是频率,然后是单词的长度,然后是位置 从左。此声明的输出:国家/地区,印度, 更好,更好,会..
我把句子分成单词列表。然后我把所有的单词都存储了 放入以频率作为值的单词的字典中,我将 根据值降序排列的字典。现在我要排序 基于长度的键(单词)具有相同的值。那我需要 根据它们的位置对所有具有相同长度的单词进行排序 出现在原始句子中。
预期产出:国家,印度,朝着更好,更伟大的方向……。
s = "India is a great country and I will work towards making our country the better India"
sen = s.split()
dictl = {}
for i in sen:
if i in dictl:
dictl[i]+=1
else:
dictl[i]=1
l = sorted(dictl.items(), key = lambda kv:(kv[1], kv[0]),reverse=True)
d = dict(l)
dd = defaultdict(list)
for k,v in d.items():
dd[v].append(k)
答案 0 :(得分:0)
在这种情况下,您必须创建自己的自定义排序功能,该功能返回一个元组(频率,长度,索引)。但是,由于我们使用reverse = True
标志进行排序,因此我们不希望原始索引,而是要使用拆分词的长度减去索引,因为这将获得排序的最后权重。
from operator import itemgetter
first = itemgetter(0)
second = itemgetter(1)
words = s.split()
d = dict()
for word in words:
if word in d:
d[word] += 1
else:
d[word] = 1
def custom_sort(tup):
frequency = second(tup)
length = len(first(tup))
idx = len(words) - words.index(first(tup))
return (frequency, length, idx)
sorted(d.items(), key=custom_sort, reverse=True)
[('country', 2),
('India', 2),
('towards', 1),
('making', 1),
('better', 1),
('great', 1),
('will', 1),
('work', 1),
('and', 1),
('our', 1),
('the', 1),
('is', 1),
('a', 1),
('I', 1)]
list(map(first, sorted(d.items(), key=custom_sort, reverse=True)))
['country',
'India',
'towards',
'making',
'better',
'great',
'will',
'work',
'and',
'our',
'the',
'is',
'a',
'I']
答案 1 :(得分:0)
//Java Code for Above Problem
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class WordSort2 {
public static void sortWord(String str) {
Map<String, Integer> map = new HashMap<>();
String[] words = str.split(" ");
for (String s : words) {
int count = 1;
if (map.containsKey(s)) {
map.put(s, map.get(s) + 1);
} else {
map.put(s, count);
}
}
String[] sArray = new String[map.size()];
int count = 0;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() > 1) {
sArray[count] = entry.getKey();
count++;
}
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() < 2) {
sArray[count] = entry.getKey();
count++;
}
}
sort(sArray);
}
public static void sort(String[] sArray) {
for (int i = 2; i < sArray.length - 1; i++) {
for (int j = 2; j < sArray.length - i + 1; j++) {
if (sArray[j].length() < sArray[j + 1].length()) {
String temp = sArray[j];
sArray[j] = sArray[j + 1];
sArray[j + 1] = temp;
}
}
}
List<String> list = new ArrayList<>();
for (String s : sArray) {
list.add(s);
}
System.out.println(list);
}
public static void main(String[] args) {
sortWord("India is a great country and I will work towards making our country the better India");
}
}