使用有序字典作为有序集

问题描述

现在,Python3.7编写了保持顺序的字典officially part of the language spec,而不是实现细节,我一直在想如何最好地使用这个属性。今天,我发现我需要一个保持秩序的集合,我想词典可能会做到这一点。

假设我们有一个Hasable元素列表。我们想要一个唯一条目的列表,并希望根据第一次出现来保持这些条目的顺序。一个简单的字典构造函数应该可以做到这一点:

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']

这将保留按第一次出现的顺序,并删除所有重复项。

我想知道社区对这个用例和总体上的顺序保存功能有什么看法。

  • 有什么原因不应该使用此方法吗?
  • 是否有更好的方法来解决此问题?
  • 此方法是Pythonic吗?

读着巨蟒的禅宗,我很矛盾。该方法简单,但依赖于隐式排序。

请告诉我你的想法。谢谢。


解决方案

这种使用Python3.7词典作为保持顺序的重复数据删除的方法是由核心开发人员here审查的。你不可能得到比这更好的推荐了。

有什么原因不应该使用此方法吗?

有没有更好的方法来解决这个问题?

此方法是Pythonic吗?

是。

该方法简单,但依赖于隐式排序。

您的问题被标记为python-3.7。确保词典保持插入顺序,因此这里没有隐式顺序。

相关文章