dict_d = {'Blue': [('Camaro', 10, 12)], 'Red': [('Camara', 10, 5)], 'Green': [('Nancy', 10, 8), ('Steve', 7, 8), ('Rich', 10, 4)]}
我上面有一个字典,我只想对具有多个值的字典进行排序,在这种情况下为“绿色”。我想按名字排序。基本上,我想得到的是:
{'Blue': [('Camaro', 10, 12)], 'Red': [('Camara', 10, 5)], 'Green': [('Nancy', 10, 8), ('Rich', 10, 4), ('Steve', 7, 8)]}
不同之处在于Green中的元组已按名称排序。
以下是我的尝试:
sorted((dict_d).items(), key = (lambda x: list(x)[1][0]))
它没有给我任何错误,它没有排序..... 很困惑......
答案 0 :(得分:1)
您不是要对字典进行排序,而是对字典的值进行排序,您可以使用字典理解来重构具有排序值的字典。
当您尝试按名称排序时,只需将名称[0]
编入索引作为排序键。
>>> {k: sorted(v, key=lambda x: x[0]) for k, v in dict_d.items()}
{'Blue': [('Camaro', 10, 12)],
'Green': [('Nancy', 10, 8), ('Rich', 10, 4), ('Steve', 7, 8)],
'Red': [('Camara', 10, 5)]}
注意:如果您不关心基于值的订单,那么您可以忽略该密钥并对元组进行排序 - sorted(v)
答案 1 :(得分:1)
如果你仔细阅读,你的问题就有答案:
注意:对列表进行排序时,Python的自然排序方法是遍历每个项目。 Python通过排序评估元组中的每个项目来排序元组(在列表中)。所以它比较了每个元组中的第一项,然后是第二项,然后是第三项。所以'名字'在这些元组中进行自动比较而无需任何特殊的比较功能。
>>> d = {'Blue': [('Camaro', 10, 12)], 'Red': [('Camara', 10, 5)], 'Green': [('Nancy', 10, 8), ('Steve', 7, 8), ('Rich', 10, 4)]}
>>> for k, v in d.items():
... if len(v) > 1:
... d[k] = sorted(v)
...
>>> d
{'Blue': [('Camaro', 10, 12)], 'Green': [('Nancy', 10, 8), ('Rich', 10, 4), ('Steve', 7, 8)], 'Red': [('Camara', 10, 5)]}
当您的列表只有一个元组时,if len(v) > 1
步骤实际上并不需要完成。由于列表只有一个项目,因此Python无需排序。
根据您的尝试进行修改:sorted((dict_d).items(), key = (lambda x: list(x)[1][0]))
:按照下面的AChampion's answer构建一个由排序值组成的新词典。