按Python中其他字典的值对字典进行排序

时间:2012-03-07 23:13:59

标签: python

如何在Python中按'votes'排序词典

{
  1 : {
    'votes' : 2,
    'id' : 10
  },
  2 : {
    'votes' : 10,
    'id' : 12
  },
  3 : {
    'votes' : 98,
    'id' : 14
  }
}

结果:

{
  3 : {
    'votes' : 98,
    'id' : 14
  },
  2 : {
    'votes' : 10,
    'id' : 12
  },
  1 : {
    'votes' : 2,
    'id' : 10
  }
}

4 个答案:

答案 0 :(得分:4)

您可以使用OrderedDict

>>> from collections import OrderedDict
>>> od = OrderedDict(sorted(d.items(),
                     key=lambda t: t[1]['votes'],
                     reverse=True))
>>> od
OrderedDict([(3, {'votes': 98, 'id': 14}),
             (2, {'votes': 10, 'id': 12}),
             (1, {'votes': 2, 'id': 10})])

其中d是您原来的字典。

答案 1 :(得分:3)

字典是未排序的,如果您希望能够按特定顺序访问字典中的元素,则可以使用jcollado的答案中的OrderedDict,或者只按任意顺序对键列表进行排序您感兴趣的指标,例如:

data = {1: {'votes': 2, 'id': 10}, 2: {'votes': 10, 'id': 12}, 3: {'votes': 98, 'id': 14}}
votes_order = sorted(data, key=lambda k: data[k]['votes'], reverse=True)
for key in votes_order:
    print key, ':', data[key]

输出:

3 : {'votes': 98, 'id': 14}
2 : {'votes': 10, 'id': 12}
1 : {'votes': 2, 'id': 10}

答案 2 :(得分:0)

标准词典没有订单,因此对它们进行排序毫无意义。这些词典都完全一样。

也许你真正想要的是一个清单?

aslist = originaldict.values()
aslist.sort(key=lambda item:item['votes'], reverse=True)

这将从您的dict中提取项目作为列表,并按votes求助于列表。

答案 3 :(得分:0)

您还可以对字典中的项目进行排序:

print sorted(d.items(), key=lambda x: x[1]['votes'], reverse=True)
像弗朗西斯的建议一样,但你知道每件物品的原始钥匙。