我在 python 中有一个“文档”字典,其中文档 ID 号作为键,字典(再次)作为值。这些内部字典每个都有一个“权重”键,其中包含一个感兴趣的浮点值。换句话说:
documents[some_id]['weight'] = ...
我想要做的是获取按“权重”值降序排列的文档 ID 列表。我知道字典本质上是无序的(在 Python 中似乎有很多方法可以做事),那么最轻松的方法是什么?感觉有点混乱的局面……
我在 python 中有一个“文档”字典,其中文档 ID 号作为键,字典(再次)作为值。这些内部字典每个都有一个“权重”键,其中包含一个感兴趣的浮点值。换句话说:
documents[some_id]['weight'] = ...
我想要做的是获取按“权重”值降序排列的文档 ID 列表。我知道字典本质上是无序的(在 Python 中似乎有很多方法可以做事),那么最轻松的方法是什么?感觉有点混乱的局面……
我采用了您可能需要键以及对象的其余部分的方法:
# 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 答案相比,它的优势在于它返回键的顺序而不是项目。这是一个额外的步骤,但这意味着您可以参考原始数据结构
我会将字典转换为元组列表并根据权重对其进行排序(以相反的顺序降序),然后删除对象以获取键列表
l = documents.items()
l.sort(key=lambda x: x[1]['weight'], reverse=True)
result = [d[0] for d in l]
这似乎对我有用。它的灵感来自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