【问题标题】:Sort a Python dictionary within a dictionary在字典中对 Python 字典进行排序
【发布时间】:2023-04-05 19:56:01
【问题描述】:

我正在尝试对字典中的字典进行排序。我的目标是根据它的值从高到低对“子”字典 ['extra'] 进行排序。我遇到的问题是我的“子”字典嵌套在主字典的深处。使用其他示例,我可以将其提高一级,请参见下面的代码。因此,我不想对“标记”进行排序,而是根据它们的值对项目 1,2 和 3 进行排序。代码:

# initializing dictionary
test_dict = {'Nikhil' : { 'roll' : 24, 'marks' : 17, 'extra' : {'item1': 2, 'item2': 3, 'item3': 5}},
             'Akshat' : {'roll' : 54, 'marks' : 12, 'extra' : {'item1': 8, 'item2': 3, 'item3': 4}}, 
             'Akash' : { 'roll' : 12, 'marks' : 15, 'extra' : {'item1': 9, 'item2': 3, 'item3': 1}}}
  
# printing original dict
print("The original dictionary : " + str(test_dict))
  
# using sorted()
# Sort nested dictionary by key
res = sorted(test_dict.items(), key = lambda x: x[1]['marks'])

# print result
print("The sorted dictionary by marks is : " + str(res))

# How to sort on 'extra'? 

所以这就是我想要的样子:

sorted_dict = {'Nikhil' : { 'roll' : 24, 'marks' : 17, 'extra' : {'item3': 5, 'item2': 3, 'item1': 2}},
             'Akshat' : {'roll' : 54, 'marks' : 12, 'extra' : {'item1': 8, 'item3': 4, 'item2': 3}}, 
             'Akash' : { 'roll' : 12, 'marks' : 15, 'extra' : {'item1': 9, 'item2': 3, 'item3': 1}}}

【问题讨论】:

  • 虽然字典在最近的 Python 版本中仍按插入顺序排列,但最佳实践仍然是使用具有真实顺序的类型。考虑使用collections.OrderedDict 的列表。
  • @KlausD。你有这方面的例子吗?
  • 不,这是关于 sorted_dict 中项目 *item1、item2、item3) 的顺序:它们从大到小排序。 test-dict 的情况并非如此。问题是如何做到这一点。
  • 等等...你不想改变item1item2item3出现的顺序,但是你想改变哪个值与它们相关联?那你为什么没有清单呢?喜欢'extra': [5, 3, 2]
  • 不,是关于订单的,然后看看与它关联的数字/值。我想查看键(item1/2/3)和它的关联值,但只是从大到小排序。在我的“真实”示例中,有时我有 item1 直到 ... item20,我希望首先拥有价值最大的那些,因为这些更相关

标签:
python
sorting
dictionary