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

10 réponses

1 2 3
Avatar
Alex Marandon
Michel Claveau wrote:
si on pouvait définir des atributs en Unicode (par exemple), il n'y
aurait plus aucun problème d'échange des sources.


Oui, Perl et Java le font.

Avatar
Amaury Forgeot d'Arc
'soir !

si on pouvait définir des atributs en Unicode (par exemple), il n'y
aurait plus aucun problème d'échange des sources.


C'est marrant, d'autres ont eu exactement l'opinion opposée:
http://www.python.org/dev/summary/2005-10-16_2005-10-31.html#unicode-identifiers

--
Amaury

Avatar
Bruno Desthuilliers
Bruno Desthuilliers wrote:


William Dode wrote:


En fait, dans Paradox, on utilise des instructions du genre :
tc.Code = "ABCD"
tc.Libellé = "Item d'article complet"
tc.Montant = 1234.56
tc.Tva = tc.Montant*19.60/100
tc.Année = 2007

Et, j'aurais aimé, sous Python, retrouver une lisibilité au moins
égale.


Heureusement que ce n'est pas possible sinon, imagine les
difficultées pour s'échanger des codes d'un pays à l'autre ! Adieu la
lisibilité pour de bon...



Pourtant je trouve ca plutot légitime de vouloir utiliser des mots de sa
langue pour nommer des identifieurs.


Oui. Et puis c'est tellement plus partique pour partager du code avec
des italiens, des russes et des japonais...



Tout a fait, si le francais n'est pas leur langue maternelle, ils
risquent d'etre deroutes par l'absence d'accents. Pour nous c'est moins
un probleme.


Joli troll. J'ai failli marcher dedans !-)





Avatar
William Dode
On 06-03-2007, Alex Marandon wrote:
Michel Claveau wrote:
si on pouvait définir des atributs en Unicode (par exemple), il n'y
aurait plus aucun problème d'échange des sources.


Oui, Perl et Java le font.


Qui, comme chacun sait, sont des modèles concernant la facilité
d'échange de code ;-)
Ou comment faire croire qu'il suffit d'un peu de technique pour résoudre
les problèmes humains...

Quand on parle a quelqu'un, on n'emploi pas forcément sa propre langue,
on emploi le plus petit dénominateur commun avec la langue de
l'interlocuteur.

--
William Dodé - http://flibuste.net
Développeur informatique indépendant


Avatar
jean-michel bain-cornu
Bonjour,
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
que voilà-ti pas du français qu'il est pas facile à compiler celui-là ;-)

construire des dictionnaires, mais qui accepte les accents (et,
éventuellement, d'autres caractères particuliers, tel l'espace).


A tout hasard, puis-je avoir l'outrecuidance de te proposer le bout de
code qui suit :

# -*- coding: iso-8859-1 -*-
def setdi2(*data):
dic= {}
for x in data[0].split('n'):
if x.strip() != '':
y= x.split('=')
k= y[0].strip("'=, ")
v= y[1].strip("'=, ")
try:
v= float(v)
except ValueError:
v= v
dic[k]= v
return dic
ad2=setdi2('''
Code = 'AAA',
Descriptif = 'Abcde',
Montant = 1234.56,
Mois = 3,
Année = 2007
'''
)
print ad2

Avatar
Alex Marandon
Amaury Forgeot d'Arc wrote:
si on pouvait définir des atributs en Unicode (par exemple), il n'y
aurait plus aucun problème d'échange des sources.


C'est marrant, d'autres ont eu exactement l'opinion opposée:
http://www.python.org/dev/summary/2005-10-16_2005-10-31.html#unicode-identifiers


Certains, mais pas tous:

"Martin v. Löwis suggested lifting the restriction that identifiers be
ASCII. (...) Neil Hodgson pointed out that even though a transliteration
into English exists for Japanese, the coders he knew preferred to use
relatively meaningless names, and Oren Tirosh indicated that Israeli
programmers often preferred transliterations for local business
terminology. In either case, with or without unicode identifiers the
code would already be hard to share. In the end, people seemed mostly in
favor of the idea, though there was some suggestion that it should wait
until Python 3.0."

Ce qu'on peut traduire grosso modo par :

"Martin v. Löwis a suggeré de lever la restriction selon laquelle les
indentifiants doivent etre en ASCII (...) Neil Hodgson a fait remarqué
que meme si il éxiste une translittération du japonais vers l'anglais,
les codeurs qu'il connait préferent utiliser des nom sans grande
signification. Oren Tirosh a indiqué que les programmeurs israeliens
préferent souvent utililiser des translittérations pour les termes
metiers locaux. Dans un cas comme dans l'autre, avec ou sans
identifiants unicode, les code serait deja difficile a partager. A la
fin, les gens étaient plutot en faveur de cette idée, meme si il a été
suggeré que cela devrait attendre Python 3.0"

Donc un peu de patience, Méta-MCI, ce sera peut-etre dans Python 3.0 :)


Avatar
Alex Marandon
William Dode wrote:
On 06-03-2007, Alex Marandon wrote:
Michel Claveau wrote:
si on pouvait définir des atributs en Unicode (par exemple), il n'y
aurait plus aucun problème d'échange des sources.
Oui, Perl et Java le font.



Qui, comme chacun sait, sont des modèles concernant la facilité
d'échange de code ;-)


Oui, c'est sur que CPAN ou Jakarta sont le fruit de petites equipes
monolingues.

Ou comment faire croire qu'il suffit d'un peu de technique pour résoudre
les problèmes humains...


Comme par exemple faire croire qu'il suffit de forcer l'indentation pour
que le code soit bien formaté ? Ou encore faire croire qu'il suffit de
limiter les identifiant a l'US-ASCII pour avoir du code facilement
échangeable ?

Quand on parle a quelqu'un, on n'emploi pas forcément sa propre langue,


Finement observé.

on emploi le plus petit dénominateur commun avec la langue de
l'interlocuteur.


Bien sur, c'est pour ca que quand un roumain et un catalan se
rencontrent, ils parlent en Latin.



Avatar
Michel Claveau
Bonsoir !

Tu peux outrecuider...

Je pense effectivement wrapper une chaîne de caractères multi-lignes.

Je pense que c'est plus simple que la solution "fichier", suggérée par
pierre Maurette.

Mais, tant qu'à faire, je vais aller un poil plus loin, dans
l'interprétation de la chaîne.




--
@-salutations

Michel Claveau
Avatar
jean-michel bain-cornu
Mais, tant qu'à faire, je vais aller un poil plus loin, dans
l'interprétation de la chaîne.


et il y a surement moyen de le faire d'une façon encore plus pythonesque...

Avatar
JBB
Bonjour !


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

def setdi(**data):
return data

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

que je ne connaissais pas.


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:devpythondic01.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




1 2 3