使用lambda排序字典的元素

时间:2018-12-22 11:41:39

标签: python python-3.x sorting dictionary

我正在尝试对字典中的值进行排序。每个值都是(element, [element,element...])形式的元组。

所以,它看起来像这样:

{'5': (2, ['6']), '1': (3, ['4', '3']), '7': (3, ['9', '11', '12'])}

它应该像这样结束:

{'5': (2, ['6']), '1': (3, ['3', '4']), '7': (3, ['11', '12', '9'])}

该顺序为字典字符串顺序,如您所见。

我尝试使用lambda进行排序,但无法到达列表:

sortedDict = sorted(orderDict.values(),key=lambda x:x[0])

3 个答案:

答案 0 :(得分:3)

您快到了,要做的就是在sorted值的第二个元素上使用key=str(如果不确定您的元素始终是{{ 1}})。

此外,您无需为此使用str表达式。

这可以简单地使用dict comprehension 来完成:

lambda

如果要就地执行此操作,则推荐使用answer of @ZeroPiraeus。由于d = {'5': (2, ['6']), '1': (3, ['4', '3']), '7': (3, ['9', '11', '12'])} sorted_d = {k: (v0, sorted(v1, key=str)) for k, (v0, v1) in d.items()} 是就地操作,因此原则上可以将其打包在列表推导中。 但是请注意,这不是推荐的方式,因为您将生成不使用的列表

sort

答案 1 :(得分:2)

如果您想返回orderDict的排序副本,则@jojo的答案将起作用。要在无需复制的情况下对字典进行排序,只需对其值进行迭代并对其进行排序:

for v in orderDict.values():
    v[1].sort()

请注意,您不需要指定key,因为您的列表已经由字符串组成,这些字符串将按照您的期望进行排序。如果您的列表 did 包含整数,则需要添加key=str

for v in orderDict.values():
    v[1].sort(key=str)

答案 2 :(得分:2)

另一种解决方案是使用dict.setdefault(),如下所示:

my_d = {'5': (2, ['6']), '1': (3, ['4', '3']), '7': (3, ['9', '11', '12'])}
new_d ={}
for n in my_d.keys():
    new_d.setdefault(n, (my_d[n][0], sorted(my_d[n][1])))

print new_d

输出:

{'1': (3, ['3', '4']), '5': (2, ['6']), '7': (3, ['11', '12', '9'])}