我已经多次使用以下方法从字典的内容生成一个元组列表:
dispositions = list(dispositions.items())
在本例中,键是患者离开急诊科的不同方式,值是这些类型的计数。现在,我想根据每个元组中的第二项对数据进行排序,所以我尝试这样做:
dispositions = list(dispositions.items()).sort(key=lambda x: x[1])
令我惊讶的是,当我运行代码时,我发现配置被设置为None。我试着把它分成两部分,如下所示:
dispositions = list(dispositions.items())
dispositions.sort(key=lambda x: x[1])
这工作!我得到了一个有序元组的列表。所以,我已经解决了我的问题,但我想知道为什么第一个选项不起作用,这样我就可以成为一个更好的人(更好的程序员是更好的人)。有人能帮我一下吗?
list.sort
不返回任何内容。所以这:
dispositions = list(dispositions.items()).sort(key=lambda x: x[1])
设置dispositions
为None
。
另一方面,sorted
返回一个新列表。所以你可以使用:
dispositions = sorted(dispositions.items(), key=lambda x: x[1])
将dispositions
设置为一个已排序的元组列表。
sort
函数并不像您想象的那样工作。它不会返回一个已排序的列表,而是直接修改列表,使其已排序。
例如,假设你有这样的代码:
a = [0, 2, 1]
a.sort()
a
现在将更改为[0, 1, 2]
。如果我使用a = a.sort()
而不是a.sort()
,它将被设置为None
。
:
dispositions = list(dispositions.items()).sort(key=lambda x: x[1])
的功能与以下相同:
dispositions = list(dispositions.items())
dispositions = dispositions.sort(key=lambda x: x[1])
设置dispositions
为sort
的返回值,即None
。
另一方面,这个:
dispositions = list(dispositions.items())
dispositions.sort(key=lambda x: x[1])
没有将dispositions
设置为sort
的值,它只是在dispositions
上调用sort
函数,这导致列表按预期排序。