[英]How to customarily sort a nested dictionary key in Python
I have a dictionary like:我有一本字典,如:
my_dict = {
'KEY1': [
{'date': 20100701, 'name': 'google', 'stock': 10},
{'date': 20100705, 'name': 'facebook', 'stock': 10}],
'KEY2': [
{'date': 20071010, 'name': 'amex', 'stock': 110},
{'date': 20071020, 'name': 'c1', 'stock': 110}],
'KEY3': [
{'date': 20100710, 'name': 'microsoft', 'stock': 100},
{'date': 20100710, 'name': 'uber', 'stock': 100}]
}
I want the nested dictionary's key in such order: [name, date, stock]
我希望嵌套字典的键按以下顺序排列:
[name, date, stock]
I have checked other links with sorted
and orderdict
examples but can't still figure out how to use them in my case.我已经用
sorted
和orderdict
示例检查了其他链接,但仍然无法弄清楚如何在我的情况下使用它们。 How can this be done?如何才能做到这一点?
You can use nested dict/list comprehensions like this:您可以像这样使用嵌套的 dict/list 推导式:
{k: [{i: d[i] for i in ('name', 'date', 'stock')} for d in l] for k, l in my_dict.items()}
This returns:这将返回:
{'KEY1': [{'name': 'google', 'date': 20100701, 'stock': 10}, {'name': 'facebook', 'date': 20100705, 'stock': 10}], 'KEY2': [{'name': 'amex', 'date': 20071010, 'stock': 110}, {'name': 'c1', 'date': 20071020, 'stock': 110}], 'KEY3': [{'name': 'microsoft', 'date': 20100710, 'stock': 100}, {'name': 'uber', 'date': 20100710, 'stock': 100}]}
Or if you are using Python 3.6 or earlier versions, you can use collections.OrderedDict
instead:或者,如果您使用的是 Python 3.6 或更早版本,则可以使用
collections.OrderedDict
代替:
OrderedDict((k, [OrderedDict((i, d[i]) for i in ('name', 'date', 'stock')) for d in l]) for k, l in my_dict.items())
This returns:这将返回:
OrderedDict([('KEY1', [OrderedDict([('name', 'google'), ('date', 20100701), ('stock', 10)]), OrderedDict([('name', 'facebook'), ('date', 20100705), ('stock', 10)])]), ('KEY2', [OrderedDict([('name', 'amex'), ('date', 20071010), ('stock', 110)]), OrderedDict([('name', 'c1'), ('date', 20071020), ('stock', 110)])]), ('KEY3', [OrderedDict([('name', 'microsoft'), ('date', 20100710), ('stock', 100)]), OrderedDict([('name', 'uber'), ('date', 20100710), ('stock', 100)])])])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.