Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Construction lisible d'un dictionnaire

23 réponses
Avatar
Méta-MCI
Bonjour !


J'aime beaucoup construire des dictionnaires de cette façon :

def setdi(**data):
return data


ad=setdi(
Code = 'AAA',
Descriptif = 'Abcde',
Montant = 1234.56,
Mois = 3,
Annee = 2007
)

print ad
# {'Descriptif': 'Abcde', 'Code': 'AAA', 'Montant': 1234.5599999999999}


car je trouve cela très lisible, notamment par l'absence de caractères
parasites (guillemets, apostrophes, accolades, etc.)



Malheureusement, ça ne passe, dès qu'il y a des caractères non "Ascii de
base" ; par exemple, des accents. Ainsi, utiliser un "E" accent aigu pour
l'année, donne :

ad=setdi(
Code = 'AAA',
Descriptif = 'Abcde',
Montant = 1234.56,
Mois = 3,
Année = 2007
)

File "D:\dev\python\dic01.py"
Année = 2007
^
SyntaxError: invalid syntax



J'ai cherché en utilisant l'encodage HTML (et en modifiant la fonction),
mais ça ne passe pas (et la lisibilité, et surtout la facilité d'écriture),
en prend un coup :

ad=setdi(
Code = 'AAA',
Descriptif = 'Abcde',
Montant = 1234.56,
Mois = 3,
Année = 2007
)

Idem en utilisant un encodage "à la LaTex" (\'e), ou l'unicode-HTML
(é)



Avant de me lancer dans un pseudo-encodage maison, j'aimerais savoir si
quelqu'un connaîtrait-il un moyen tout-prêt, aussi lisible/facile, de
construire des dictionnaires, mais qui accepte les accents (et,
éventuellement, d'autres caractères particuliers, tel l'espace).


Merci d'avance.

Michel Claveau

3 réponses

1 2 3
Avatar
NicolasP

def setdi(**data):
return data

Je n'arrive pas à trouver dans la doc les explications concernant le **

que je ne connaissais pas.



A l'appel d'une fonction :
- ** explose un dictionnaire en autant de paramètres nommés et affectés qu'il y a d'entrées dans le dictionnaire
d={"valeur1":10, "valeur2":22)
fonction(d)

est équivalent à :
fonction (valeur1, valeur2")

- * explose une liste en autant de valeurs qu'il y a d'entrées dans la liste
l=[10, 22]
fonction(l)

est équivalent à :
fonction (10, 22)

Lors de la déclaration d'une fonction :
- ** permet de récupérer des arguments nommés (la quantité dépend de l'appel)
- * permet de récupérer une liste d'argument non nommés (la quantité dépend de l'appel)

Il y a des règles à respecter lors de la définition d'une fonction avec cette syntaxe.
Les arguments nommés doivent être les premiers, ensuite, *, ensuite **.

Par exemple :
class MyClass(BaseClass):
def __init__(self, param1, param2, *args, **kwargs):
BaseClass.__init__(self, *args, **kwargs)
.
.
.



Nicolas


Avatar
Méta-MCI
Pas mieux (sauf pour le mot "explose", qui me semble un tantinet
terroriste. Rassure-moi : tu n'as pas été dans un cyber-café de Casa, tantôt
? )


Michel Claveau
Avatar
NicolasP
Pas mieux (sauf pour le mot "explose", qui me semble un tantinet
terroriste. Rassure-moi : tu n'as pas été dans un cyber-café de Casa,
tantôt ? )
Désolé. Je surveillerai mon langage à l'avenir... Pour ne pas me coincer ;)


Nicolas

1 2 3