2

我在 python 中有一个“文档”字典,其中文档 ID 号作为键,字典(再次)作为值。这些内部字典每个都有一个“权重”键,其中包含一个感兴趣的浮点值。换句话说:

documents[some_id]['weight'] = ...

我想要做的是获取按“权重”值降序排列的文档 ID 列表。我知道字典本质上是无序的(在 Python 中似乎有很多方法可以做事),那么最轻松的方法是什么?感觉有点混乱的局面……

4

3 回答 3

2

我采用了您可能需要键以及对象的其余部分的方法:

# Build a random dictionary
from random import randint
ds = {}                             # A |D|ata |S|tructure
for i in range(20,1,-1):
  ds[i]={'weight':randint(0,100)}

sortedDS = sorted(ds.keys(),key=lambda x:ds[x]['weight'])
for i in sortedDS :
 print i,ds[i]['weight']

sorted()是一个内置的python,它接受一个列表并返回它(显然),但是它可以采用一个key值来确定每个对象的等级。在上述情况下,它使用'weight'值作为排序的键。

与 Ameers 答案相比,它的优势在于它返回的顺序而不是项目。这是一个额外的步骤,但这意味着您可以参考原始数据结构

于 2013-09-09T04:10:11.120 回答
2

我会将字典转换为元组列表并根据权重对其进行排序(以相反的顺序降序),然后删除对象以获取键列表

l = documents.items()
l.sort(key=lambda x: x[1]['weight'], reverse=True)
result = [d[0] for d in l]
于 2013-09-09T04:01:49.970 回答
0

这似乎对我有用。它的灵感来自OrderedDict问题 #9001509

from collections import OrderedDict

d = {
    14: {'weight': 90},
    12: {'weight': 100},
    13: {'weight': 101},
    15: {'weight': 5}
 }

sorted_dict = OrderedDict(sorted(d.items(), key=lambda rec: rec[1].get('weight')))
print sorted_dict
于 2013-09-09T04:12:28.700 回答