Построить вложенный словарь на основе коэффициентов связи - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть 3 переменные, a, b и c, и 3 коэффициента a_b, a_c и b_c. Я хочу использовать их для создания вложенного словаря rel, который будет следующим:

   a   b    c
a  1   a_b  a_c
b a_b  1    b_c
c a_c  b_c   1

Так, например:

rels['a']['b']=a_b
rels['b']['c']=b_c
rels['a']['a']=1

и т. Д.

Понятно, что я могу сделать это жестко:

rels = {}
rels['a']={{'a':1,'b':a_b,'c':a_c}}

и т. Д. Мне было интересно, есть ли более элегантный / эффективный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вы можете перебирать свой список, и для каждого элемента элемента в списке вы можете найти связь этого элемента (или каждой переменной) со всеми переменными в списке и сохранить их в другом списке. Простым способом - `

var = ['a','b','c']
rels = {}
for item in var:
    rel = {}
    for i in range(0,len(var)):
       if(item == var[i]): 
           rel[item] = 1
       else:
           rel[item] = item+"_"+var[i]
    rels[item] = rel
0 голосов
/ 30 апреля 2018

Вы можете разделить данные и использовать словарь понимания:

import re
s = """
   a   b    c
 a  1   a_b  a_c
 b a_b  1    b_c
 c a_c  b_c   1
"""
new_s = [list(filter(None, re.split('\s+', i))) for i in filter(None, s.split('\n'))] 
new_data = {a:dict(zip(new_s[0], b)) for a, *b in new_s[1:]}

Выход:

{'a': {'a': '1', 'b': 'a_b', 'c': 'a_c'}, 'b': {'a': 'a_b', 'b': '1', 'c': 'b_c'}, 'c': {'a': 'a_c', 'b': 'b_c', 'c': '1'}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...