python: tuple of dictionary to Dictionary

后端 未结 6 1910
一个人的身影
一个人的身影 2021-01-20 19:02

How can I convert tuple of dictionaries like example present below:

({(1, 2): 3},
 {(1, 3): 5},
 {(1, 4): 5},
 {(2, 4): 5},
 {(1, 5): 10},
 {(2, 6): 9},
 {(1         


        
6条回答
  •  不要未来只要你来
    2021-01-20 19:58

    If order of the elements in the desired dict matters and is needed to be sorted as mentioned in the question, use collections.OrderedDict as:

    # `original_list` is the variable holding the
    # `list` of `dict` as mentioned in the question
    
    required_dict = OrderedDict(
        sorted((k, v) for sub_list in original_list for k, v in sub_list.items()))
    
    # `OrderedDict` is represented as:
    #    OrderedDict([((1, 1), 2), ((1, 2), 3), ((1, 3), 5), ((1, 4), 5), ((1, 5), 10), ((1, 6), 9), ((2, 1), 2), ((2, 2), 3), ((2, 3), 5), ((2, 4), 5), ((2, 5), 10), ((2, 6), 9)])
    

    but returns sorted dict maintaining the order equivalent to the one desired in the question as:

    {(1, 1): 2,
     (1, 2): 3,
     (1, 3): 5,
     (1, 4): 5,
     (1, 5): 10,
     (1, 6): 9,
     (2, 1): 12,
     (2, 2): 7,
     (2, 3): 7,
     (2, 4): 3,
     (2, 5): 4,
     (2, 6): 2}
    

    But if order of elements in the desired dict doesn't matter, you may use simple dict comprehension to achieve it as:

    required_dict = {k: v for sub_list in original_list for k, v in sub_list.items()}
    

    where the value of required_dict will be:

    {
        (1, 2): 3, 
        (2, 6): 9, 
        (1, 4): 5, 
        (1, 1): 2, 
        (1, 5): 10, 
        (1, 3): 5, 
        (1, 6): 9, 
        (2, 1): 2, 
        (2, 2): 3, 
        (2, 3): 5, 
        (2, 5): 10, 
        (2, 4): 5
    }
    

    Note: Order of items in the desired dict are different because dictionaries in Python are unordered by nature.

提交回复
热议问题