Make a dictionary with duplicate keys in Python

后端 未结 7 1072
野的像风
野的像风 2020-11-22 00:37

I have the following list which contains duplicate car registration numbers with different values. I want to convert it into a dictionary which accepts this multiple keys of

7条回答
  •  伪装坚强ぢ
    2020-11-22 00:55

    If you want to have lists only when they are necessary, and values in any other cases, then you can do this:

    class DictList(dict):
        def __setitem__(self, key, value):
            try:
                # Assumes there is a list on the key
                self[key].append(value)
            except KeyError: # If it fails, because there is no key
                super(DictList, self).__setitem__(key, value)
            except AttributeError: # If it fails because it is not a list
                super(DictList, self).__setitem__(key, [self[key], value])
    

    You can then do the following:

    dl = DictList()
    dl['a']  = 1
    dl['b']  = 2
    dl['b'] = 3
    

    Which will store the following {'a': 1, 'b': [2, 3]}.


    I tend to use this implementation when I want to have reverse/inverse dictionaries, in which case I simply do:

    my_dict = {1: 'a', 2: 'b', 3: 'b'}
    rev = DictList()
    for k, v in my_dict.items():
        rev_med[v] = k
    

    Which will generate the same output as above: {'a': 1, 'b': [2, 3]}.


    CAVEAT: This implementation relies on the non-existence of the append method (in the values you are storing). This might produce unexpected results if the values you are storing are lists. For example,

    dl = DictList()
    dl['a']  = 1
    dl['b']  = [2]
    dl['b'] = 3
    

    would produce the same result as before {'a': 1, 'b': [2, 3]}, but one might expected the following: {'a': 1, 'b': [[2], 3]}.

提交回复
热议问题