summaryrefslogtreecommitdiff
path: root/dictionary.py
blob: 9fe1bb4680f0c0d18f23d3de7909d32d198f9abb (plain)
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
import errors

# Recursive merge sort algorithm
# https://rosettacode.org/wiki/Sorting_algorithms/Merge_sort#Python
def merge(x, y, i):
    if x == []:
        return y
    if y == []:
        return x
    return (
        [x[0]] + merge(x[1:], y, i)
        if x[0][i] < y[0][i]
        else [y[0]] + merge(x, y[1:], i)
    )


def sort(a, n, i):
    m = n // 2
    return (
        a
        if n <= 1
        else merge(sort(a[:m], m, i), sort(a[m:], n - m, i), i)
    )


class dictionary:
    def __init__(self):
        self.data = []
        self.size = 0

    def add(self, key, value):
        if type(value) != int:
            self.data.append([key, value])
            self.size += 1

    # increment a value
    def inc(self, key, value=1):
        # defensive programming
        in_data = False
        i = 0
        # high efficiency loop stops after found
        while i < self.size and in_data == False:
            if self.data[i][0] == key:
                self.data[i][1] += value
                in_data = True
            i += 1
        if not in_data:
            self.add(key, value)

    # Sort dictionary by value
    def sort_by_value(self):
        self.data = sort_v(self.data, self.size, 1)