我正在整理一本有单子的词典。例如,如果我有这本字典:
a = {'q': {3: [4, 2, 7]}, 'a': {1: [5, 45, 11]}, 'e': {23: [11, 45, 2]}}
我希望排序后的输出为:
^{pr2}$我实际上是逆向排序,使用列表中的第一项作为排序的键。在
如果两个列表的前一项相同,如上面所示,我将按字母顺序对与列表(主键)关联的字符串进行排序。在
我不确定是否能得到包含字典的元组的输出,因为我正在为字典中的列表排序。在
我试过这个代码:
sorted((x,b.items(), key=lambda x:[1][2]) for x,b in a.items())
它引发了一个无效语法的错误,我不知道出了什么问题。在
我不是百分之百肯定,但你最终是在追求吗?在
让我们把这个问题分成几个部分。您确实想对列表
a.items()
排序。所以:现在,对于列表中的每个元素,都有一个值为},},而{}给你{}。辅助排序键只是
'q'
等)的元组和一个字典。假设每个字典只包含一个键,您希望使用每个字典值的index-1元素作为主键。所以,第一个元素的键应该是:to_sort[0][1].values()[0][1]
:to_sort[0][1]
给你字典{.values()
给你一个列表{to_sort[0]
。在所以我们得到:
^{pr2}$我们快到了。现在只需告诉sort您想要反向输出:
这是你想要的吗?在
如果您想要一条直线,您可以:
至少在交互式解释器中,完整的错误消息应准确显示错误发生的位置:
注意,
^
就在=
的正下方。在这并不能告诉你为什么会有错误,但至少它告诉你应该去哪里看。在
仔细观察后,注意下面的子表达式:
^{pr2}$这是一个元组,它的第三个成员是
key=lambda x:[1][2]
。但作为一个表达式,这是无效的。所以,你把括号放错地方了。或者,您将key
参数添加到了错误的位置。我想你的意思是:没有
SyntaxError
那里。看起来以后会得到一个IndexError
,但是你到了那里就可以处理了。在相关问题 更多 >
编程相关推荐