start law year time joy time word family friend year tonight year law time joy work library word justice start time work president year start time president country joy family
If you give it as an input, you can use frequency, word as an element
[(2, 'work'), (2, 'word'), (2, 'family'), (1, 'justice'), (3, 'joy'), (4, 'year'), (1, 'library'), (1, 'country'), (1, 'tonight'), (3, 'start'), (5, 'time'), (2, 'president'), (2, 'law'), (1, 'friend')]
You can make a list like this
How can I give you the option to sort by frequency and sort by alphabetical order when the frequency is the same, like work and word?
Input starts law year time joy time word family friend tonight law time joy work library word justice start time work present year country joy family Cotton
Output should be time year joy start family law president word country friend justification library tonight
python sorting
Press 'Do' below.
words = ["start","law","year","time","joy","time","word","family","friend","year","tonight","year","law","time","joy","work","library","word","justice","start","time","work","president","year","start","time","president","country","joy","family"]
words_count={}
for word in words:
if word in words_count:
words_count[word] += 1
else:
words_count[word] = 1
sorted_words = sorted([(k,v) for k,v in words_count.items()], key=lambda word_count: -word_count[1])
print([w[0] for w in sorted_words])
If you want to put in alphabetical alignment, you can use the comparator.
import functools
def comparator(x, y):
return x[0]*x[1]-y[0]*y[1]
l = [[-50,5], [2,2], [1,2], [9,3]]
print(sorted(l, key=functools.cmp_to_key(comparator)))
You can also do sorted twice as below.
from collections import Counter
s = "start law year time joy time word family friend year tonight year law time joy work library word justice start time work president year start time president country joy family"
sorted(sorted(Counter(s.split()).most_common(), key=lambda pair:pair[0], reverse=False), key=lambda pair:pair[1], reverse=True)
Out[59]:
[('time', 5),
('year', 4),
('joy', 3),
('start', 3),
('family', 2),
('law', 2),
('president', 2),
('word', 2),
('work', 2),
('country', 1),
('friend', 1),
('justice', 1),
('library', 1),
('tonight', 1)]
The asq (https://github.com/sixty-north/asq) module, which can be used like linq, is also useful.
from collections import Counter
from asq.initiators import query
s = "start law year time joy time word family friend year tonight year law time joy work library word justice start time work president year start time president country joy family"
query(Counter(s.split()).most_common()).order_by_descending(lambda pair:pair[1]).then_by(lambda pair:pair[0]).to_list()
Out:
[('time', 5),
('year', 4),
('joy', 3),
('start', 3),
('family', 2),
('law', 2),
('president', 2),
('word', 2),
('work', 2),
('country', 1),
('friend', 1),
('justice', 1),
('library', 1),
('tonight', 1)]
© 2024 OneMinuteCode. All rights reserved.