Генерировать границы из словаря параметров - PullRequest
0 голосов
/ 24 сентября 2019

То, что я пытаюсь сделать, это то, что я считаю конкретным, но мне было интересно, если у кого-нибудь было представление о том, как я могу написать что-то хорошее для выполнения того, что я хочу.Я начинаю со словаря этого формата:

inp = {
    "val1":{
        'param1':   [0.0, 0.003543809774418695, 0.0], 
        'param2':   [0.0, 0.04439156494695967, 0.0], 
        'param3':   [0.0, 0.27337841732514817, 1.0]
    },
    "val2":{
        'param1':   [0.0, 0.27704015849313185, 1.0], 
        'param2':   [0.0, 0.004835039503062099, 0.0], 
        'param3':   [0.0, 0.038987106843840116, 0.0]
    },
    "val3":{
        'param1':   [0.0, 0.02446316540346886, 0.0], 
        'param2':   [0.0, 0.0, 1.0], 
        'param3':   [0.0, 0.011166103115052235, 0.0]
    }

}

И из этого я хочу вывести еще один словарь, который будет выглядеть так:

bounds = {
    'param1':   [[min of first coordinate, max of first coordinate], [min of second coordinate, max  of second coordinate], [min  of third coordinate,max  of third coordinate]], 
    'param2':   [[min of first coordinate, max of first coordinate], [min of second coordinate, max  of second coordinate], [min  of third coordinate,max  of third coordinate]], 
    'param3':   [[min of first coordinate, max of first coordinate], [min of second coordinate, max  of second coordinate], [min  of third coordinate,max  of third coordinate]]
}

Конкретно, ядолжно закончиться этим для param1:

'param1':[[0.0,0.0],[0.003543809774418695,0.27704015849313185], [0.0,1.0]]

Я пытаюсь получить хороший и чистый код, но у меня возникают проблемы, чтобы найти что-то в данный момент ... Числа "val", "params"и длина списков должна быть гибкой ... Есть идеи?Большое спасибо

Приветствия

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Это не красиво, но я думаю, что это делает:

# assumes each nested dict has identical keys
bounds = {}
prim_key = list(inp.keys())[0]
nested_keys = inp[prim_key].keys()
sec_key = list(nested_keys)[0]
list_length = len(inp[prim_key][sec_key])

for nested_key in nested_keys:
    bounds[nested_key] = []
    for coord in range(list_length):
        vals = [inp[d][nested_key][coord] for d in inp.keys()]
        bounds[nested_key].append([min(vals), max(vals)])

print(bounds)

Вывод:

{'param1': [[0.0, 0.0],
            [0.003543809774418695, 0.27704015849313185],
            [0.0, 1.0]],
 'param2': [[0.0, 0.0],
            [0.0, 0.04439156494695967],
            [0.0, 1.0]],
 'param3': [[0.0, 0.0],
            [0.011166103115052235, 0.27337841732514817],
            [0.0, 1.0]]}

Редактировать: это также предполагает, что списки имеют одинаковую длину

0 голосов
/ 24 сентября 2019

Окончательный результат сохраняется в словаре границ:

bounds={}
for dictionaryK, dictionaryV in inp.items():
    for key, item in dictionaryV.items():
        if key not in bounds.keys():
            bounds[key] = []
        bounds[key].append([min(item), max(item)])
...