Python:对有序字典进行排序

5

我创建了一个字典:

d[1] = {'a':1, 'b':2}
d[2] = {'a':5, 'b':3}
d[3] = {'a':3, 'b':2}

我尝试按字段排序:

d = collections.OrderedDict(sorted(d.items(), key=itemgetter(1)))

以便我可以输出:
for key in d:
    print key, d[key]

这个是按照 'a' 进行排序的,但我不知道如何按照 'b' 进行排序。如何按照 'b' 进行排序?

编辑:我不确定为什么会让人感到不清楚。我想要按照字段 'b' 中��值进行排序。


1
itemgetter(1)不是按照a排序,它是按照第一个值排序,第一个值可能是a - njzk2
你尝试过使用 itemgetter('b') 吗? - njzk2
@njzk2 这样做不行,因为元组没有像 'b' 这样的项。 - Ashwini Chaudhary
没错,它将每个条目都视为元组,并且“b”不是元组的索引。 - foosion
1
仍然不确定为什么这被评为缺乏清晰度而被推荐关闭。 - foosion
1个回答

11

修改您的键函数,以便明确返回b值。

d = collections.OrderedDict(sorted(d.items(), key=lambda (key, value): value['b']))
编辑:显然,在lambda中使用元组解包会导致3.X出现问题,因此你可能不得不采用更长的方式:
d = collections.OrderedDict(sorted(d.items(), key=lambda key_value_pair: key_value_pair[1]['b']))

可以,谢谢。我想没有办法使用itemgetter或attrgetter吧? - foosion
实际上,普通函数也不支持元组参数解包:PEP 3113 - Ashwini Chaudhary
3
@foosion,据我所知没有。问题是,您要获取的值需要深入两个级别,而普通的itemgetter只能深入一个级别。 - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接