Сортировка словаря по его подзначению - PullRequest
0 голосов
/ 19 февраля 2020

У меня в настоящее время есть словарь в Python3, который выглядит следующим образом

{'parentkey1': {'value1': 3, 'value2': 0},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value1': 8, 'value2': 3}
 }

Есть ли способ, которым я могу расположить вложенный словарь так, чтобы он стал

{'parentkey1': {'value2': 0, 'value1': 3},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value2': 3, 'value1': 8}
}

Ответы [ 3 ]

2 голосов
/ 19 февраля 2020

, начиная с python 3.6, словари упорядочены по вставке , поэтому вы можете использовать:

 d = {'parentkey1': {'value1': 3, 'value2': 0},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value1': 8, 'value2': 3}
 }

d = {k : dict(sorted(v.items(), key=lambda x: x[1])) for k, v in d.items()}
d

вывод:

{'parentkey1': {'value2': 0, 'value1': 3},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value2': 3, 'value1': 8}}

вы можете использовать OrderedDict , если хотите, чтобы порядок вставки гарантировался в других реализациях Python

1 голос
/ 19 февраля 2020

здесь вы go.

  data = {'parentkey1': {'value1': 3, 'value2': 0},
  'parentkey2': {'value1': 2, 'value2': 5},
  'parentkey3': {'value1': 6, 'value2': 9},
  'parentkey4': {'value1': 8, 'value2': 3}
  }

  for key, value in data.items():
    print(value)

  print("\n")

  for key, value in data.items():
    new = {}
    if value["value1"] >=  value["value2"]:
      new["value2"] = value["value2"]
      new["value1"] = value["value1"]
    else:
      new["value1"] = value["value1"]
      new["value2"] = value["value2"]
    data[key] = new

  for key, value in data.items():
    print(value)
0 голосов
/ 19 февраля 2020

Можно просто переключать значения, если значение2> значение1 для каждого элемента

data = {'parentkey1': {'value1': 3, 'value2': 0},
  'parentkey2': {'value1': 2, 'value2': 5},
  'parentkey3': {'value1': 6, 'value2': 9},
  'parentkey4': {'value1': 8, 'value2': 3}
  }


for key, value in data.items():
    if value['value1'] > value['value2']:
        value['value1'], value['value2'] = value['value2'], value['value1']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...