在Python中的字典内按字典键排序

时间:2010-03-10 05:36:21

标签: python dictionary sorting

如何按“remaining_pcs”或“discount_ratio”的值对以下字典进行排序?

promotion_items = {
    'one': {'remaining_pcs': 100, 'discount_ratio': 10},
    'two': {'remaining_pcs': 200, 'discount_ratio': 20},
}

修改

我的意思是获取上面字典的排序列表,而不是对字典本身进行排序。

3 个答案:

答案 0 :(得分:5)

您只能将词典的(或项目或值)排序到单独的列表中(正如我多年前在@Andrew引用的配方中所写的那样)。例如,根据您所述的标准对密钥进行排序:

promotion_items = {
    'one': {'remaining_pcs': 100, 'discount_ratio': 10},
    'two': {'remaining_pcs': 200, 'discount_ratio': 20},
}
def bypcs(k):
  return promotion_items[k]['remaining_pcs']
byrempcs = sorted(promotion_items, key=bypcs)
def bydra(k):
  return promotion_items[k]['discount_ratio']
bydiscra = sorted(promotion_items, key=bydra)

答案 1 :(得分:2)

请参阅To sort a dictionary

  

无法对字典进行排序 - a   映射没有排序! - 所以,什么时候   你觉得有必要整理一个,你没有   怀疑想要对其键进行排序(在...中   单独列表)。

答案 2 :(得分:0)

如果'remaining_pcs''discount_ratio'是嵌套词典中的唯一键,那么:

result = sorted(promotion_items.iteritems(), key=lambda pair: pair[1].items())

如果还有其他钥匙:

def item_value(pair):
    return pair[1]['remaining_pcs'], pair[1]['discount_ratio']
result = sorted(promotion_items.iteritems(), key=item_value)