J'ai une liste de dictionnaires imbriqués et je voudrais sélectionner les paires clé: valeur où clé = valeur et additionner toutes les valeurs. Comment pourrais-je faire cela avec une seule ligne de code? [{'default': {'AA': {'Quantity': ...

0
Florent 17 mars 2021 à 00:53

2 réponses

Meilleure réponse

Je crois que c'est ce que vous recherchez.

lst = [{'default': {'AA': {'quantity': 0.05215832, 'value': 2940.4440669952},
              'BB': {'quantity': 493.96434168, 'value': 888.9823555432}},
 'basic': {'CC': {'quantity': 911.84309821, 'value': 911.84309821}},
 'expert': {'DD': {'quantity': 0.00833, 'value': 0.036579529000000006},
          'AA': {'quantity': 0.000823, 'value': 0.303896042},
          'RR': {'quantity': 0.000166, 'value': 0.0035026000000000002},
          'FF': {'quantity': 0.00183, 'value': 0.057991785}}}]

lst_sum = sum(value['value'] for key in lst[0].keys() for value in lst[0][key].values())
print(lst_sum)
# Prints 4741.6714907044

Cela exécute une compréhension de liste, puis résume toutes les valeurs. Il parcourt d'abord chaque niveau ('default', 'basic' et 'expert') puis parcourt chaque paire de lettres ('AA', 'BB', etc.).

1
M-Chen-3 16 mars 2021 à 22:08

Vous pourriez faire:

input_nested_dict = {'AA': {'quantity': 0.05215832, 'value': 2940.4440669952},
                     'BB': {'quantity': 493.96434168, 'value': 888.9823555432}}
    
sum([input_nested_dict[key]['value'] for key in input_nested_dict.keys()])

J'ai supposé sur la base de l'extrait de code de la touche de sélection que vous avez donné que vous travaillez sur une base par dictionnaire et non sur la liste entière à la fois.

Vous pouvez supprimer les crochets pour avoir un générateur au lieu d'une compréhension de liste:

sum(input_nested_dict[key]['value'] for key in input_nested_dict.keys())
0
Mathieu 16 mars 2021 à 22:04