按字典的子值排序

问题描述 投票:1回答:3

我目前在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}
}
python python-3.x sorting dictionary
3个回答
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():
    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
投票

如果每个项目的value2> value1,只需切换值就可以做到

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']

0
投票

由于python 3.6 dictionaries are insertion ordered,所以您可以使用:

 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}}

如果希望在其他Python实现中保证插入顺序,则可以使用OrderedDict

© www.soinside.com 2019 - 2024. All rights reserved.