【问题标题】:Python sort multi dimensional dictPython排序多维字典
【发布时间】:2017-09-11 14:05:27
【问题描述】:
input={11: {'perc': 0, 'name': u'B test', 'cid': 11, 'total': 0, 'pending': 0, 'complete': 0}, 10: {'perc': 0, 'name': u'C test', 'cid': 10, 'total': 0, 'pending': 0,'complete': 0}, 3: {'perc': 9, 'name': u'Atest Pre-requisites', 'cid': 3, 'total': 11, 'pending': 10, 'complete': 1}}

我想根据名称字段对这个字典进行排序。我是python新手,请大家帮帮我。

【问题讨论】:

  • 但字典有自己的排序顺序。您的预期结果是什么?
  • sorted(mydict.iteritems(), key=lambda (k,v): (v,k)):这将排序键值dict。
  • 我想按名称升序排序
  • 不要在 cmets 中发布您的尝试。 edit你的帖子。

标签: python python-2.7


【解决方案1】:

首先,应避免使用保留字(如input)作为变量(现在input被重新定义,不再调用函数input())。

此外,无法对字典进行排序。如果不需要键,可以将字典转换成列表,然后排序。代码是这样的:

input_dict = {11: {'perc': 0, 'name': u'B test', 'cid': 11, 'total': 0, 'pending': 0, 'complete': 0}, 10: {'perc': 0, 'name': u'C test', 'cid': 10, 'total': 0, 'pending': 0,'complete': 0}, 3: {'perc': 9, 'name': u'Atest Pre-requisites', 'cid': 3, 'total': 11, 'pending': 10, 'complete': 1}}
input_list = sorted(input_dict.values(), key=lambda x: x['name'])
print(input_list)
# prints [{'perc': 9, 'complete': 1, 'cid': 3, 'total': 11, 'pending': 10, 'name': u'Atest Pre-requisites'}, {'perc': 0, 'complete': 0, 'cid': 11, 'total': 0, 'pending': 0, 'name': u'B test'}, {'perc': 0, 'complete': 0, 'cid': 10, 'total': 0, 'pending': 0, 'name': u'C test'}]

编辑

如果您希望保留密钥并使用您在 cmets 中所说的 iteritems(),请改用此代码:

input_dict = {11: {'perc': 0, 'name': u'B test', 'cid': 11, 'total': 0, 'pending': 0, 'complete': 0}, 10: {'perc': 0, 'name': u'C test', 'cid': 10, 'total': 0, 'pending': 0,'complete': 0}, 3: {'perc': 9, 'name': u'Atest Pre-requisites', 'cid': 3, 'total': 11, 'pending': 10, 'complete': 1}}
input_list = sorted(input_dict.iteritems(), key=lambda x: x[1]['name'])
print(input_list)
# prints [(3, {'perc': 9, 'complete': 1, 'cid': 3, 'total': 11, 'pending': 10, 'name': u'Atest Pre-requisites'}), (11, {'perc': 0, 'complete': 0, 'cid': 11, 'total': 0, 'pending': 0, 'name': u'B test'}), (10, {'perc': 0, 'complete': 0, 'cid': 10, 'total': 0, 'pending': 0, 'name': u'C test'})]

【讨论】:

  • 感谢您的回复。有什么办法可以用key显示。此输出没有密钥。
  • 刚刚添加到我的答案!
  • 您尝试了整个代码,还是只尝试了一行?如果有问题,我会添加其余的
  • 不,我尝试了整个代码。我替换了 input_list 行,但我没有打印任何内容
  • 我实际上只是复制和粘贴这三行,而且打印效果很好。也许您正在尝试使用原始输入并且您没有将变量名称更改为input_dict
猜你喜欢
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 2012-11-19
  • 2012-07-29
  • 1970-01-01
  • 2013-05-01
  • 2016-08-05
相关资源
最近更新 更多