Does Python have an ordered set?

前端 未结 14 1362
予麋鹿
予麋鹿 2020-11-21 13:20

Python has an ordered dictionary. What about an ordered set?

相关标签:
14条回答
  • 2020-11-21 13:56

    The answer is no, but you can use collections.OrderedDict from the Python standard library with just keys (and values as None) for the same purpose.

    Update: As of Python 3.7 (and CPython 3.6), standard dict is guaranteed to preserve order and is more performant than OrderedDict. (For backward compatibility and especially readability, however, you may wish to continue using OrderedDict.)

    Here's an example of how to use dict as an ordered set to filter out duplicate items while preserving order, thereby emulating an ordered set. Use the dict class method fromkeys() to create a dict, then simply ask for the keys() back.

    >>> keywords = ['foo', 'bar', 'bar', 'foo', 'baz', 'foo']
    
    >>> list(dict.fromkeys(keywords))
    ['foo', 'bar', 'baz']
    
    0 讨论(0)
  • 2020-11-21 14:01

    A little late to the game, but I've written a class setlist as part of collections-extended that fully implements both Sequence and Set

    >>> from collections_extended import setlist
    >>> sl = setlist('abracadabra')
    >>> sl
    setlist(('a', 'b', 'r', 'c', 'd'))
    >>> sl[3]
    'c'
    >>> sl[-1]
    'd'
    >>> 'r' in sl  # testing for inclusion is fast
    True
    >>> sl.index('d')  # so is finding the index of an element
    4
    >>> sl.insert(1, 'd')  # inserting an element already in raises a ValueError
    ValueError
    >>> sl.index('d')
    4
    

    GitHub: https://github.com/mlenzen/collections-extended

    Documentation: http://collections-extended.lenzm.net/en/latest/

    PyPI: https://pypi.python.org/pypi/collections-extended

    0 讨论(0)
提交回复
热议问题