我正在尝试对字典中的值进行排序。每个值都是(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])
答案 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'])}