Netsed словарь в Python - PullRequest
       2

Netsed словарь в Python

0 голосов
/ 21 ноября 2018

Попытка ввести вложенный словарь, но результаты показывают вложенное значение с последней записью.Я думаю, это потому, что я пытаюсь добавить вложенный ключ с одинаковым для всех:

for i in range(15, 19, 1):
    left_index = counters[i].find(']')
    right_index = counters[i].rfind(': ')
    key = counters[i][left_index + 1:right_index]
    value = counters[i][right_index + 1:].replace('[(','').replace(')]','').replace(') - (',' ').strip().split(' ')
    d1['value'] = value[0]
    d1['minimum'] = value[1]
    d1['maximum'] = value[-1]
    print 'key: ',key, 'value: ', d1
    d[key] = d1

encoder.FLOAT_REPR = lambda x: format(x, '.5f')
print json.dumps(d, indent=5, sort_keys=True)

И результат:

key:   Socket/Modem 1/Bytes sent value:  {'minimum': '0', 'maximum': '2482262614', 'value': '2482262614'}
key:   Socket/Modem 1/recv value:  {'minimum': '0', 'maximum': '19646', 'value': '19646'}
key:   Socket/Modem 1/send value:  {'minimum': '0', 'maximum': '2078818', 'value': '2078818'}
key:   StreamerEngine/Bonding/Priority queue/Packets of '' priority dequeued value:  {'minimum': '0', 'maximum': '0', 'value': '0'}


{
 " Socket/Modem 1/Bytes sent": {
      "maximum": "0",
      "minimum": "0",
      "value": "0"
 },
 " Socket/Modem 1/recv": {
      "maximum": "0",
      "minimum": "0",
      "value": "0"
 },
 " Socket/Modem 1/send": {
      "maximum": "0",
      "minimum": "0",
      "value": "0"
 },
 " StreamerEngine/Bonding/Priority queue/Packets of '' priority dequeued": {
      "maximum": "0",
      "minimum": "0",
      "value": "0"
 }
}

Таким образом, вы можете видеть, чтоd1 словарь набран хорошо, но накопленный словарь d нет.

1 Ответ

0 голосов
/ 21 ноября 2018

d1 (вероятно) объявлен вне вашего цикла, поэтому вы снова и снова используете один и тот же объект , поэтому последние присвоенные значения используются во всех других диктовках.

Вместо этого определите d1 внутри цикла:

for i in range(15, 19, 1):
    left_index = counters[i].find(']')
    right_index = counters[i].rfind(': ')
    key = counters[i][left_index + 1:right_index]
    value = counters[i][right_index + 1:].replace('[(','').replace(')]','').replace(') - (',' ').strip().split(' ')
    d1 = {} # <- new dict!
    d1['value'] = value[0]
    d1['minimum'] = value[1]
    d1['maximum'] = value[-1]
    print 'key: ',key, 'value: ', d1
    d[key] = d1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...