benedict.core.invert   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 25
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 7
eloc 18
dl 0
loc 25
rs 10
c 0
b 0
f 0

3 Functions

Rating   Name   Duplication   Size   Complexity  
A invert() 0 8 3
A _invert_list() 0 3 2
A _invert_item() 0 5 2
1
from benedict.core import clone
2
from benedict.utils import type_util
3
4
5
def _invert_item(d, key, value, flat):
6
    if flat:
7
        d.setdefault(value, key)
8
    else:
9
        d.setdefault(value, []).append(key)
10
11
12
def _invert_list(d, key, value, flat):
13
    for value_item in value:
14
        _invert_item(d, key, value_item, flat)
15
16
17
def invert(d, flat=False):
18
    new_dict = clone(d, empty=True)
19
    for key, value in d.items():
20
        if type_util.is_list_or_tuple(value):
21
            _invert_list(new_dict, key, value, flat)
22
        else:
23
            _invert_item(new_dict, key, value, flat)
24
    return new_dict
25