Python - l'accès à des valeurs imbriquées à l'intérieur des dictionnaires
J'ai un dictionnaire qui contient les dictionnaires, qui peut également contenir les dictionnaires, par exemple
dictionary = {'ID': 0001, 'Name': 'made up name', 'Transactions':
{'Transaction Ref': 'a1', 'Transaction Details':
{'Bill To': 'abc', 'Ship To': 'def', 'Product': 'Widget A'
...} ...} ... }
Actuellement, je suis déballage pour obtenir le "projet De Loi" pour l'ID 001, des Transactions " Ref " a1 comme suit:
if dictionary['ID'] == 001:
transactions = dictionary['Transactions']
if transactions['Transaction Ref'] == 'a1':
transaction_details = transactions['Transaction Details']
bill_to = transaction_details['Bill To']
Je ne peux pas aider mais pense que c'est un peu maladroit, surtout les deux dernières lignes - j'ai envie de quelque chose le long des lignes de la suivante devrait fonctionner:
bill_to = transactions['Transaction Details']['Bill To']
Est-il une approche plus simple pour le forage vers le bas dans imbriqués les dictionnaires, sans avoir à décompresser dans intérimaire variables?
La ligne vous vous sentez devrait fonctionner dans la réalité.
OriginalL'auteur user1530213 | 2012-07-28
Vous devez vous connecter pour publier un commentaire.
fonctionne réellement.
transactions['Transaction Details']
est une expression désignant undict
, de sorte que vous pouvez faire de recherche. Pour la pratique, je préfère un OO approche imbriquée dicts.collections.namedtuple
est particulièrement utile pour mettre rapidement en place un groupe de classes qui contiennent uniquement les données (et pas de comportement de leurs propres).Il y a une mise en garde: dans certaines situations, vous pourriez attraper
KeyError
quand on fait des recherches, et dans ce cadre, qui travaille trop, il est difficile de dire qui recherche dans le dictionnaire échoué:OriginalL'auteur Fred Foo
Vous pouvez utiliser quelque chose comme ceci:
En outre, si vous ne voulez pas définir vos clés de recherche que les paramètres individuels, vous pouvez simplement passer-les dans une liste comme ceci:
OriginalL'auteur astynax
Qui suit est un autre moyen d'accéder à imbriqués les dictionnaires
Ici, la variable " nom "se réfère à" la dbo['m']['d']['v']['version']', qui semble beaucoup plus courte et soignée.
Cette méthode ne sera pas jeter KeyError. Si une clé n'est pas trouvée, alors vous aurez 'Rien'.
Réf.: http://code.activestate.com/recipes/475156-using-reduce-to-access-deeply-nested-dictionaries/
OriginalL'auteur blackfyre