使用公共密钥合并多个词典

2024-07-02 13:58:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用公共键“Pontos”合并多个词典的列表:

all_dicts = [{'Pontos': {'70': {0: {'atleta_id': 92981, 'apelido': 'Ronaldo'}, 
                                1: {'atleta_id': 107677, 'apelido': 'Juninho'}, 
                                2: {'atleta_id': 71937, 'apelido': 'Juninho'} 
                               }
                        }
             }, 
             {'Pontos': {'75': {0: {'atleta_id': 85425, 'apelido': 'João Paulo'}, 
                                1: {'atleta_id': 71937, 'apelido': 'Juninho'}, 
                                2: {'atleta_id': 105998, 'apelido': 'Vinícius'} 
                               }
                        }    
             },...]

结果是:

{'Pontos': {'70': {0: {'atleta_id': 92981, 'apelido': 'Ronaldo'}, 
                   1: {'atleta_id': 107677, 'apelido': 'Juninho'}, 
                   2: {'atleta_id': 71937, 'apelido': 'Juninho'} 
                  }
            },
  
             {'75': {0: {'atleta_id': 85425, 'apelido': 'João Paulo'}, 
                     1: {'atleta_id': 71937, 'apelido': 'Juninho'}, 
                     2: {'atleta_id': 105998, 'apelido': 'Vinícius'} 
                    }
            }, ...
}

我该怎么做


Tags: id列表all词典dictsjovinpaulo
3条回答

试试这个

d={}
for k in all_dicts[0].keys():
 d[k]=tuple(d[k] for d in all_dicts)

Aaron Hall's answer

from copy import deepcopy

def dict_of_dicts_merge(x, y):
    z = {}
    overlapping_keys = x.keys() & y.keys()
    for key in overlapping_keys:
        z[key] = dict_of_dicts_merge(x[key], y[key])
    for key in x.keys() - overlapping_keys:
        z[key] = deepcopy(x[key])
    for key in y.keys() - overlapping_keys:
        z[key] = deepcopy(y[key])
    return z

result = {}
for dict_elem in all_dicts:
   dict_of_dicts_merge(result, dict_elem)

return result

使用列表理解和更新

def merge_dicts(lst_dicts, keyword):
    # List comprehension to get list of dicts with keyword
    lst = [d[keyword] for d in lst_dicts if d.get(keyword)]

    # Use update to place into one dictionary
    result = {keyword:{}}
    for d in lst:
        result[keyword].update(d)
        
    return result

用法

result = merge_dicts(all_dicts, 'Pontos')
    

示例

all_dicts = [{'Pontos': {'70': {0: {'atleta_id': 92981, 'apelido': 'Ronaldo'}, 
                                1: {'atleta_id': 107677, 'apelido': 'Juninho'}, 
                                2: {'atleta_id': 71937, 'apelido': 'Juninho'} 
                               }
                        }
             }, 
             {'Pontos': {'75': {0: {'atleta_id': 85425, 'apelido': 'João Paulo'}, 
                                1: {'atleta_id': 71937, 'apelido': 'Juninho'}, 
                                2: {'atleta_id': 105998, 'apelido': 'Vinícius'} 
                               }
                        }    
             },
            {'Other': {'72': {0: {'atleta_id': 12981, 'apelido': 'Ronaldo'}, 
                         1: {'atleta_id': 207677, 'apelido': 'Juninho'}, 
                         2: {'atleta_id': 31937, 'apelido': 'Juninho'} 
                        }
                  }
                
            }]

结果

{'Pontos': {'70': {0: {'atleta_id': 92981, 'apelido': 'Ronaldo'},
   1: {'atleta_id': 107677, 'apelido': 'Juninho'},
   2: {'atleta_id': 71937, 'apelido': 'Juninho'}},
  '75': {0: {'atleta_id': 85425, 'apelido': 'João Paulo'},
   1: {'atleta_id': 71937, 'apelido': 'Juninho'},
   2: {'atleta_id': 105998, 'apelido': 'Vinícius'}}}}

相关问题 更多 >