既然Python3.7使用了保序dictsofficially part of the language spec而不是实现细节,我一直在努力思考如何最好地使用这个属性。今天,我发现我需要一个保序集,我想字典也许能解决这个问题。在
假设我们有一个散列元素列表。我们需要一个唯一条目的列表,并且我们希望根据第一次出现来保持这些条目的顺序。一个简单的字典构造器应该做到:
ls = "Beautiful is better than ugly. Explicit..."
uniques = list({s:0 for s in ls})
>>> ['B', 'e', 'a', 'u', 't', 'i', 'f', 'l', ' ', 's', 'b', 'r', 'h', 'n', 'g', 'y', '.', 'E', 'x', 'p', 'c']
这将保留第一次出现时的顺序,并清除所有重复项。在
我想知道社区对这个用例和订单保持特性的总体看法。在
通过阅读Python的禅,我感到很矛盾。该方法简单,但依赖于隐式排序。在
请告诉我你的想法。谢谢您。在
这种使用Python3.7字典作为保序重复数据消除的方法是由Python核心开发人员here审查的。没有比这更好的推荐了。在
没有
没有
是的。在
您的问题标记为python-3.7。保证字典保留插入顺序,所以这里没有隐式排序。在
这在python3.7上非常有用!。。但是python3.7并不是唯一的Python版本。在相当长的一段时间内,依赖dict顺序保存将是一个危险的习惯,因为如果您的代码运行在Python 3.6之前的版本上,它将停止维护顺序,完全安静。在
例如,依赖
dataclasses
或contextvars
并不危险,因为如果你试图在一个没有dataclasses
的Python上运行依赖dataclasses
的代码,就会得到一个很大的、清晰的ImportError
。失去秩序的话语并没有同样明显的表现。在你可能不知道它已经停止维持秩序了。你可能不记得你依赖于口述命令。您可能会忘记记录或告诉任何人您依赖它,或者您可能是一个糟糕的程序员,因为您继承了其他人依赖dict命令的代码,而没有记录python3.7+的需求。您可能不知道您忘记在一台特定的机器上更新Python,或者您不小心从Anaconda或其他什么地方掉了出来,而您使用的是仍然使用3.4的系统python3。在
最终还是可以用dict命令。目前,尤其是3.7发布几天后,最好使用
OrderedDict
,或者添加版本检查:相关问题 更多 >
编程相关推荐