Completed
Push — master ( c396a1...0e306d )
by Fabio
03:31
created

benedict.core.invert   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 27
Duplicated Lines 0 %

Importance

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

3 Functions

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