У меня есть словарь в Python, который имеет формат

dict = {
                    'p_id':         254,
                    's_id':           1,
                    'object_cnt':     4,

                    'type0':          0,
                    'address0':       65500,
                    'size0':          2,
                    'value0':         23.4,

                    'type1':          1,
                    'address1':       65535,
                    'size1':          2,
                    'value1':         45.7,

                    'type2':          2,
                    'address2':       65,
                    'size2':          0,
                    'value2':         1,

                    'type3':          3,
                    'address3':       535,
                    'size3':          0,
                    'value3':         0,                                                            
}

Поскольку object_cnt равен 4, в этом словаре будет четыре объекта.

                       'type0':          0,
                    'address0':       65500,
                       'size0':          2,
                      'value0':         23.4,

Вышесказанное можно рассматривать как один объект. Я хочу создать словарь формы

new_dict = {
                    '65500' : (2,23.4)
                    '65535' : (2,45)
                    '65'    : (0,1)
                    '535'   : (0,0)
          }
#address of a object as key and (size_object,value_object) as value 

Может кто-то помочь мне с этим?

Благодарность

1
cvg 16 Авг 2019 в 08:54

2 ответа

Лучший ответ

Используйте форматирование строки:

res = {d['address%s' % i]: [d['size%s' %i], d['value%s' % i]] for i in range(d['object_cnt'])}  

Выход:

{65: [0, 1], 535: [0, 0], 65500: [2, 23.4], 65535: [2, 45.7]}
2
Chris 16 Авг 2019 в 06:00
a  = {
                    'p_id':         254,
                    's_id':           1,
                    'object_cnt':     4,

                    'type0':          0,
                    'address0':       65500,
                    'size0':          2,
                    'value0':         23.4,

                    'type1':          1,
                    'address1':       65535,
                    'size1':          2,
                    'value1':         45.7,

                    'type2':          2,
                    'address2':       65,
                    'size2':          0,
                    'value2':         1,

                    'type3':          3,
                    'address3':       535,
                    'size3':          0,
                    'value3':         0,                                                            
}
n = a['object_cnt']
new_dict = dict()
for i in range(n):
    new_dict[str(a['address{}'.format(i)])]=(a['size{}'.format(i)],a['value{}'.format(i)])
print(new_dict) 
#{'65500': (2, 23.4), '65535': (2, 45.7), '65': (0, 1), '535': (0, 0)}
1
ComplicatedPhenomenon 16 Авг 2019 в 06:07