相关疑难解决方法(0)

如何在Python 3.x中获得类似2.x的排序行为?

我试图复制(如果可能改善)的Python 2.x的在3.x的排序行为,使双方可订购的类型,如int,float等进行排序预期,并且互相unorderable类型的输出中进行分组.

这是我正在谈论的一个例子:

>>> sorted([0, 'one', 2.3, 'four', -5])  # Python 2.x
[-5, 0, 2.3, 'four', 'one']
Run Code Online (Sandbox Code Playgroud)
>>> sorted([0, 'one', 2.3, 'four', -5])  # Python 3.x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()
Run Code Online (Sandbox Code Playgroud)

我之前尝试过这个,使用一个关键参数的类sorted()(参见 为什么这个用于排序异构序列的关键类表现奇怪?)从根本上被打破了,因为它的方法是

  1. 试图比较价值,和
  2. 如果失败,则回退到比较其类型的字符串表示

BrenBarn的出色答案所解释的那样,可以导致不及物处理.

我最初在没有尝试编码的情况下拒绝的一种天真的方法是使用返回(type, value)元组的键函数:

def motley(value):
    return repr(type(value)), value
Run Code Online (Sandbox Code Playgroud)

但是,这不符合我的要求.首先,它打破了相互可订购类型的自然顺序:

>>> sorted([0, 123.4, 5, -6, 7.89])
[-6, 0, 5, 7.89, 123.4]
>>> sorted([0, …
Run Code Online (Sandbox Code Playgroud)

python sorting python-2.x python-3.x

54
推荐指数
3
解决办法
3960
查看次数

Python按属性排序,可以是None

假设我有一个我要排序的项目列表:items = [ item1, item2, item3 ].我想用来对它们进行排序的属性是item.data.value,所以我通常会去:

sorted(items, key=attrgetter('data.value'))
Run Code Online (Sandbox Code Playgroud)

那工作得很好.但是,data实际上None显然我无法访问value.

你通常如何处理这样的场景?

PS:这个问题这个问题都没有帮助.

python sorting python-2.7

5
推荐指数
1
解决办法
931
查看次数

如果密钥存在,则按密钥对字典的字典列表进行排序

我有一个这样的词典列表:

[{"foo" : "bar", "myKey" : "one"}, 
{"foo" : "bar", "myKey" : "two"}, 
{"foo" : "bar", "yourKey" : "three"}]
Run Code Online (Sandbox Code Playgroud)

如果存在,我想通过字典中的键对其进行排序.

featured = sorted(filesToWrite, key=lambda k: k["myKey"])
Run Code Online (Sandbox Code Playgroud)

如果"myKey"不存在,这不起作用. 编辑:如果myKey字典中不存在,我希望它出现在列表的末尾.

我可以手动循环遍历列表并自己完成,但我确信有一种pythonic方法可以实现我的目标而不会完成所有这些.

python sorting

3
推荐指数
1
解决办法
4493
查看次数

标签 统计

python ×3

sorting ×3

python-2.7 ×1

python-2.x ×1

python-3.x ×1