我有一个嵌套字典(类别和子类别)dict
,我在排序时遇到问题。
dict
的输出是:
{u'sports': {u'basketball': {'name': u'Basketball', 'slug': u'basketball'}, u'baseball': {'name': u'Baseball', 'slug': u'baseball'}}, u'dance': {u'salsa': {'name': u'Salsa', 'slug': u'salsa'}}, u'arts': {u'other-5': {'name': u'Other', 'slug': u'other-5'}, u'painting': {'name': u'Painting', 'slug': u'painting'}}, u'music': {u'cello': {'name': u'Cello', 'slug': u'cello'}, u'accordion': {'name': u'Accordion', 'slug': u'accordion'}}}
如何对此词典进行排序,以便“其他”字典排除在外。子类别始终显示在嵌套字典的末尾。例如," arts"类别应该是:
..., u'arts': {u'painting': {'name': u'Painting', 'slug': u'painting'}, u'other-5': {'name': u'Other', 'slug': u'other-5'}}...
答案 0 :(得分:3)
你对字典有一些重大的概念误解。 python中的字典就像hash table,哈希表没有顺序。 dict的输出实际上取决于环境,所以你不能依赖它。您可能会看到输出的一种方式,而其他人看到另一种方式。您应该考虑使用OrderedDict
代替。
答案 1 :(得分:0)
Python字典(常规dict
实例)未排序。如果你想对你的词典进行排序,你可以:
from collections import OrderedDict
mynewdict = OrderedDict(sorted(yourdict.items()))
OrderedDict不提供排序机制,但只尊重插入其中的键的顺序(我们对那些事先调整排序的键进行排序)。
由于您需要一个特定的标准(假设您的密钥按字母顺序排列,除了“其他”密钥到达结尾),您需要声明它:
def mycustomsort(key):
return (0 if key != 'other' else 1, key)
mynewdict = OrderedDict(sorted(yourdict.items(), key=mycustomsort))
这样你就可以为嵌套标准创建一个元组:第一个标准是other to no-other,所以0或1(因为1更大,其他更晚),而第二个标准是关键本身。您可以删除第二个条件,如果需要,不返回元组,但只返回0和1,代码将无法按字母顺序排序。
如果您打算稍后编辑字典,此解决方案将无效,并且没有支持该字典的标准类。