你有两个问题:对嵌套字典进行排序并维护排序结果。在Python中,字典是无序的。
要对你所用的示例字典进行排序,可以采取以下方法:
import calendar
months=list(calendar.month_name)
myDictODicts= {'Green Cars': {'April': 11455.0, 'March': 12210, 'February': 2559, 'August': 1439, 'July': 4921, 'January': 340, 'December': 340, 'November': 340, 'October': 306, 'September': 6},
'Yellow cars': {'April': 192914, 'March': 20187, 'February': 20994, 'January': 230625, 'December': 208422, 'November': 17914, 'October': 170835, 'September': 185357, 'July': 226697, 'May': 1852, 'August': 22096},
'Red Cars': {'April': 159, 'March': 1400, 'February': 2620, 'January': 237, 'August': 2959, 'July': 6943}}
for k in myDictODicts:
print(k, sorted(myDictODicts[k].items(), key=lambda t: months.index(t[0])))
输出:
Green Cars [('January', 340), ('February', 2559), ('March', 12210), ('April', 11455.0), ('July', 4921), ('August', 1439), ('September', 6), ('October', 306), ('November', 340), ('December', 340)]
Yellow cars [('January', 230625), ('February', 20994), ('March', 20187), ('April', 192914), ('May', 1852), ('July', 226697), ('August', 22096), ('September', 185357), ('October', 170835), ('November', 17914), ('December', 208422)]
Red Cars [('January', 237), ('February', 2620), ('March', 1400), ('April', 159), ('July', 6943), ('August', 2959)]
您可以使用元组列表或直接重新创建字典。在Python 3.6中,您可以将排序后的元组列表转换回字典,并保持插入顺序。您还可以使用
OrderedDict,它会以与
dict
相同的方式显示给代码的其他部分。
示例:
from collections import OrderedDict
nd={}
for k in myDictODicts:
nd[k]=OrderedDict(sorted(myDictODicts[k].items(), key=lambda t: months.index(t[0])))
>>> nd
{'Green Cars': OrderedDict([('January', 340), ('February', 2559), ('March', 12210), ('April', 11455.0), ('July', 4921), ('August', 1439), ('September', 6), ('October', 306), ('November', 340), ('December', 340)]), 'Yellow cars': OrderedDict([('January', 230625), ('February', 20994), ('March', 20187), ('April', 192914), ('May', 1852), ('July', 226697), ('August', 22096), ('September', 185357), ('October', 170835), ('November', 17914), ('December', 208422)]), 'Red Cars': OrderedDict([('January', 237), ('February', 2620), ('March', 1400), ('April', 159), ('July', 6943), ('August', 2959)])}
OrderedDict
?我能够通过for k in data: newList[k] = sorted(data[k].items...)
向新字典添加内容,所以太好了!我会阅读关于OrderedDict
的资料,但是是否有一个快速的一两行摘要,告诉我为什么我可能想使用它而不是返回一个省略OrderedDict()
的新字典? - BruceWayne