J'ai une liste de listes en Python que j'ai besoin de convertir en dictionnaire ou json, ma liste ressemble à ceci:
{
"user1": {
"Administration": 100
},
"user2": {
"Development": 170,
"Testing": 30
},
"user3": {
"Administration": 95,
"Development": 400,
"Testing": 200
}
}
J'ai besoin de ceci pour ressembler à ceci:
[ ['user1', 'Administration', 100], ['user2', 'Development', 170], ['user2', 'Testing', 30], ['user3', 'Administration', 95], ['user3', 'Development', 400], ['user3', 'Testing', 200] ]
Quelle est la meilleure façon de procéder? ma boucle actuelle écrase la clé, j'en ai besoin pour ajouter les attributs respectifs si l'utilisateur existe déjà.
Merci!
5 Réponses :
Utilisation de dict.setdefault
Sortie: {'user1': {'Administration': 100},
'user2': {'Development': 170, 'Testing': 30},
'user3': {'Administration': 95, 'Development': 400, 'Testing': 200}}
data = [
['user1', 'Administration', 100],
['user2', 'Development', 170],
['user2', 'Testing', 30],
['user3', 'Administration', 95],
['user3', 'Development', 400],
['user3', 'Testing', 200]
]
result = {}
for k, sub_k, v in data:
result.setdefault(k, {}).update({sub_k: v})
@kuro. Merci de ne pas voir ça
Approche courte avec l'objet collections.defaultdict :
{'user1': {'Administration': 100},
'user2': {'Development': 170, 'Testing': 30},
'user3': {'Administration': 95, 'Development': 400, 'Testing': 200}}
La sortie:
from collections import defaultdict
# data (your initial list of lists)
d = defaultdict(dict)
for uname, k, v in data:
d[uname][k] = v
print(dict(d))
# import defaultdict to initialize by dictionary
from collections import defaultdict
# our data
ls = [
['user1', 'Administration', 100],
['user2', 'Development', 170],
['user2', 'Testing', 30],
['user3', 'Administration', 95],
['user3', 'Development', 400],
['user3', 'Testing', 200]
]
# create final response
d = defaultdict(dict)
# iterate and fill the result
for u, k, v in ls:
d[u][k] = v
# see if it's correct
print(d)
defaultdict(dict,
{'user1': {'Administration': 100},
'user2': {'Development': 170, 'Testing': 30},
'user3': {'Administration': 95, 'Development': 400, 'Testing': 200}})
Merci beaucoup à vous tous! cette solution est tellement plus simple que la façon dont j'essayais de le faire.
Pour une compréhension plus simple
{'user2': {'Testing': 30}, 'user3': {'Testing': 200}, 'user1': {'Administration': 100}}
user_list = [
['user1', 'Administration', 100],
['user2', 'Development', 170],
['user2', 'Testing', 30],
['user3', 'Administration', 95],
['user3', 'Development', 400],
['user3', 'Testing', 200]
]
user_dict={}
for user in user_list:
user_dict[user[0]]={user[1]:user[2]}
print(user_dict)
Vous pouvez également utiliser itertools.groupby:
{'user1': {'Administration': 100}, 'user2': {'Development': 170, 'Testing': 30}, 'user3': {'Administration': 95, 'Development': 400, 'Testing': 200}}
Output:
from itertools import groupby as gb
d = [['user1', 'Administration', 100], ['user2', 'Development', 170], ['user2', 'Testing', 30], ['user3', 'Administration', 95], ['user3', 'Development', 400], ['user3', 'Testing', 200]]
result = {a:{c:d for _, c, d in b} for a, b in gb(d, key=lambda x:x[0])}
Veuillez montrer votre effort
Pouvons-nous voir le code actuel?