Python 有有序集吗?

新手上路,请多包涵

Python 有一个 有序的字典。有序集呢?

原文由 Casebash 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 323
2 个回答

有一个 有序集(可能是 新链接)配方,这是从 Python 2 文档 中引用的。这在 Py2.6 或更高版本和 3.0 或更高版本上运行,无需任何修改。界面几乎与普通集合完全相同,除了初始化应该用列表完成。

 OrderedSet([1, 2, 3])

这是一个 MutableSet,因此 .union 的签名与 set 的签名不匹配,但由于它包含 __or__ 可以轻松添加类似内容:

 @staticmethod
def union(*sets):
    union = OrderedSet()
    union.union(*sets)
    return union

def union(self, *sets):
    for set in sets:
        self |= set

原文由 Casebash 发布,翻译遵循 CC BY-SA 3.0 许可协议

答案是否定的,但您可以使用 Python 标准库中的 collections.OrderedDict 和键(以及 None )来达到相同的目的。

更新:从 Python 3.7(和 CPython 3.6)开始,标准 dict 保证保留顺序 并且比 OrderedDict 性能更高。 (然而,为了向后兼容,尤其是可读性,您可能希望继续使用 OrderedDict 。)

下面是一个示例,说明如何使用 dict 作为有序集,在保留顺序的同时过滤掉重复项,从而模拟有序集。使用 dict 类方法 fromkeys() 创建一个字典,然后简单地要求 keys() 返回。

 >>> keywords = ['foo', 'bar', 'bar', 'foo', 'baz', 'foo']

>>> list(dict.fromkeys(keywords))
['foo', 'bar', 'baz']

原文由 jrc 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题