Les valeurs dans une liste ne sont pas vraiment variables plus. Ils ne sont pas désignés par un nom dans un espace de noms, mais par un nombre entier indiquant leur décalage par rapport au début de la liste ( 0
, 1
, ...).
Si vous voulez associer chaque dict
de données avec un certain nom, vous devez le faire explicitement. Il existe deux options générales, en fonction de ce qui est responsable du suivi du nom : la collection de personnes, ou chaque personne de la collection.
Le premier et le plus facile est le collections.OrderedDict
--- contrairement à la normale dict
il conservera l'ordre des personnes dans votre liste.
from collections import OrderedDict
sam = {
'food': 'tortas',
'country': 'Mexico',
'song': 'Dream On',
}
dave = {
'food': 'spaghetti',
'country': 'USA',
'song': 'Sweet Home Alabama',
}
# The OrderedDict stores each person's name.
people = OrderedDict([('Sam', sam), ('Dave', dave)])
for name, data in people.items():
# Name is a key in the OrderedDict.
print('Name: ' + name)
for key, value in sorted(data.items()):
print(' {0}: {1}'.format(key.title(), value))
Alternativement, vous pouvez stocker le nom de chaque personne dans son propre fichier dict
... en supposant que vous êtes autorisé à modifier le contenu de ces dictionnaires. (De même, vous ne voudriez pas ajouter quoi que ce soit au dictionnaire de données qui vous obligerait à modifier/mettre à jour les données plus souvent que vous ne le faites déjà. Étant donné que la plupart des gens changent leur plat ou leur chanson préférés beaucoup plus souvent qu'ils ne changent de nom, cela est probablement sans danger).
sam = {
# Each dict has a new key: 'name'.
'name': 'Sam',
'food': 'tortas',
'country': 'Mexico',
'song': 'Dream On',
}
dave = {
'name': 'Dave',
'food': 'spaghetti',
'country': 'USA',
'song': 'Sweet Home Alabama',
}
people = [sam, dave]
for data in people:
# Name is a value in the dict.
print('Name: ' + data['name'])
for key, value in sorted(data.items()):
# Have to avoid printing the name again.
if 'name' != key:
print(' {0}: {1}'.format(key.title(), value))
Notez que la façon dont vous imprimez les données dépend du fait que vous stockez le nom dans la collection ( OrderedDict
variante), ou dans les dict
( list
variante).