-
-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathcounter.py
66 lines (56 loc) · 1.98 KB
/
counter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from heapq import nlargest
from operator import itemgetter
from typing import Any, Dict, List, Optional, Tuple
class Counter(dict):
"""
Counter merupakan Class untuk menghitung data-data unique
pada setiap nilai.
Args:
dict: parameter bersifat map.
"""
def __init__(
self, iterable: Optional[Dict[Any, int]] = None, **kwargs: int
) -> None:
"""
counter ini bisa digunakan dalam bentuk apapun
baik bentuk sting,list maupun yang lain
>>> Counter("hallo")
{'h': 1, 'a': 1, 'l': 2, 'o': 1}
>>> Counter({'a':3,'b':2,'c':1})
{'a': 3, 'b': 2, 'c': 1}
"""
super().__init__()
self.update(iterable, **kwargs)
def update(self, iterable: Optional[Dict[Any, int]] = None, **kwargs: int) -> None:
if iterable is not None:
if hasattr(iterable, "items"):
if self:
self_get = self.get
for element, count in iterable.items():
self[element] = self_get(element, 0) + count
else:
dict.update(self, iterable)
else:
self_get = self.get
for element in iterable:
self[element] = self_get(element, 0) + 1
if kwargs:
self.update(kwargs)
def paling_muncul(self, n: Optional[int] = None) -> List[Tuple[Any, int]]:
"""
fungsi ini merupakan menampilkan angka
yang sering dicaribisa dikatakan bahwa
nilai yang dominan
Args:
n (int, optional): ingin menampilkan sampai ke
berapa.
Returns:
_type_: berupa value di urut dari terbesar
"""
if n is None:
return sorted(self.items(), key=itemgetter(1), reverse=True)
else:
return nlargest(n, self.items(), key=itemgetter(1))
if __name__ == "__main__":
import doctest
doctest.testmod(verbose=True)