Is there a 'multimap' implementation in Python?

后端 未结 8 1625
离开以前
离开以前 2020-12-01 01:26

I am new to Python, and I am familiar with implementations of Multimaps in other languages. Does Python have such a data structure built-in, or available in a commonly-used

8条回答
  •  一向
    一向 (楼主)
    2020-12-01 01:50

    Such a thing is not present in the standard library. You can use a defaultdict though:

    >>> from collections import defaultdict
    >>> md = defaultdict(list)
    >>> md[1].append('a')
    >>> md[1].append('b')
    >>> md[2].append('c')
    >>> md[1]
    ['a', 'b']
    >>> md[2]
    ['c']
    

    (Instead of list you may want to use set, in which case you'd call .add instead of .append.)


    As an aside: look at these two lines you wrote:

    a[1] = 'a'
    a[1] = 'b'
    

    This seems to indicate that you want the expression a[1] to be equal to two distinct values. This is not possible with dictionaries because their keys are unique and each of them is associated with a single value. What you can do, however, is extract all values inside the list associated with a given key, one by one. You can use iter followed by successive calls to next for that. Or you can just use two loops:

    >>> for k, v in md.items():
    ...     for w in v:
    ...         print("md[%d] = '%s'" % (k, w))
    ... 
    md[1] = 'a'
    md[1] = 'b'
    md[2] = 'c'
    

提交回复
热议问题