Bonjour,
Big picture
Je souhaite alimenter un dictionnaire, sur la base d'un Parser Lexx/Yacc.
Toutefois je vous fais grâce du contenu du Parser.
Et actuellement, il me renvoi bien ce que j'attendais.
Je souhaiterai donc créer ce dictionnaire, via des "pointeurs" (ou référence) pour alimenter chaque valeur de clé, dans les items des listes.
Toutefois, la profondeur de ce dictionnaire sera très variable (selon ce que découvre le Parser).
J'ai donc fait un petit code, qui permet de lire un dictionnaire, pour la simulation du Parser (dict1), afin d'en alimenter un autre.
Mais je suis "sec" sur ce que je dois mettre pour alimenter le second dictionnaire (dict2).
Pour info, je fais très bien cela en Perl, mais là j'avoue être perdu...
Si vous pouviez me mettre sur la bonne piste, je serai un homme heureux
Note:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 #!/usr/bin/env python3 import json dict2 = {} current = { 'pad': 0 } dict1 = { 'level1': [ { 'prp1': 'foo1', 'prp2': 'bar', 'prp3': 'zzz', 'level2': [ { 'prp1': 'foo12', 'prp2': 'bar12', }, { 'prp1': 'foo13', 'prp2': 'bar13', }, ], }, { 'prp1': 'foo2', 'prp2': 'bar', 'prp3': 'zzz', 'level2': [ { 'prp1': 'foo22', 'prp2': 'bar22', }, { 'prp1': 'foo23', 'prp2': 'bar23', }, ], }, ], } def _readList(myList): for myItem in myList: print("{}{}".format( ' ' * current['pad'], '---' )) if isinstance(myItem, dict): _readDict(myItem) def _readDict(currentDict): for k,v in currentDict.items(): if isinstance(v, list): print("{}{}".format( ' ' * current['pad'], k )) current['pad']+=1 _readList(v) current['pad']-=1 else: print("{}{}={}".format( ' ' * current['pad'], k, v )) _readDict(dict1) print(json.dumps(dict2))
Les pad dans les print, sont juste là pour l'indentation de sortie et les tirets pour montrer les ruptures.
Et comme je n'aime pas trop les "global", j'ai mis la valeur du pad, dans in dictionnaire.
Aparté:
Du reste, je trouve plutôt étrange, de permettre, à un dictionnaire ou une liste, d'être "global" et pas une variable?!
Je n'ai peut être pas compris un truc... ?
La sortie donne ceci :
Merci d'avance de votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 level1 --- prp1=foo1 prp2=bar prp3=zzz level2 --- prp1=foo12 prp2=bar12 --- prp1=foo13 prp2=bar13 --- prp1=foo2 prp2=bar prp3=zzz level2 --- prp1=foo22 prp2=bar22 --- prp1=foo23 prp2=bar23 {}![]()
Partager