web-dev-qa-db-fra.com

Dictionnaire d'accès Python dans la liste d'un dictionnaire

Salut, j'ai le dictionnaire ci-dessous qui a une valeur avec une liste, et à l'intérieur de la liste est un dictionnaire. Est-il possible d'appeler la valeur du dictionnaire à l'intérieur de la liste en utilisant la clé au lieu de l'index de la liste? Le dictionnaire à l'intérieur de la liste peut varier, de sorte que la valeur d'index peut ne pas toujours fournir la bonne paire clé/valeur. Mais si je peux utiliser la clé, je peux toujours obtenir la valeur correcte.

mylist = {'mydict': [{'A': 'Letter A'}, {'B': 'Letter C'}, {'C': 'Letter C'}]}
print(mylist['mydict'][0]['A'])

Sortie de courant:

Letter A

Requête souhaitée:

print(mylist['mydict']['A'])
Letter A
4
MBasith

Pour le moment, vous avez 3 dictionnaires dans une liste dans un dictionnaire. Essayez le ci-dessous à la place:

my_nested_dictionary = {'mydict': {'A': 'Letter A', 'B': 'Letter C', 'C': 'Letter C'}}
print(my_nested_dictionary['mydict']['A'])
5
M3RS

Regardez le code ci-dessous:

>>> mylist = {'mydict': [{'A': 'Letter A'}, {'B': 'Letter C'}, {'C': 'Letter C'}]}
>>> for dictionary in mylist['mydict']:
...  try:
...   dictionary['A']
...  except KeyError:
...   pass
... 
'Letter A'

Vous parcourez un dictionnaire dans votre liste, puis essayez d'appeler votre clé A. Vous attrapez KeyError car la clé du dictionnaire peut être absente.

2
Laszlowaty

Essayez le code suivant pour générer le nouveau dict.

mylist = {'mydict': [{'A': 'Letter A'}, {'B': 'Letter C'}, {'C': 'Letter C'}]}
newDict={}
for item in mylist['mydict']:
    newDict.update(item)
mylist['mydict']=newDict
print(mylist['mydict']['A'])
2
aristotll

Que diriez-vous d'utiliser un générateur?

item = next(item['A'] for item in mylist['mydict'] if 'A' in item)
0
Dmytro Chekunov

Ceci n'est possible que si vos données d'origine sont formatées comme suit:

mylist = {'mydict': {'A': 'Letter A','B': 'Letter C','C': 'Letter C'}}

donc sans la liste intégrée - ce qui ne semble pas ajouter une structure significative?

0
Thijs Cobben