J'ai beaucoup de identifiants d'employés - comme indiqué ci-dessous.
Je dois obtenir la valeur du nom de l'entreprise et l'ajouter à une liste.
J'ai besoin d'obtenir les politiques de valeur et de les ajouter à une liste après avoir vérifié parent .
si le parent est Marketing , le nom doit être ajouté au niveau1.
si le parent est Publicité , le nom doit être ajouté au niveau2.
si une entreprise est [] je dois passer Aucun au lieu de Null List
Il faut également vérifier que la clé existe ou non pour certaines clés, il y a un risque de manquer de politiques , business
[
{
"id": "100",
"name": "A",
"Business": ["Enterprise", "Customer"],
"level1": ['Second division', 'First division'],
"level2": [ ]
},
{
"id": "101",
"name": "B",
"Business": ["Enterprise", "Customer"],
"level1": ['Second division', 'First division'],
"level2": [ ]
}
]
Mon code
product = {}
product['id'] = {}
product['name'] = {}
product['Business'] = {}
x = [{**d, "Business": [i["name"] for i in d["Business"]]} for d in test]
product["policies"]["level1"] = []
product["policies"]["level2"] = []
for j in test["policies"]:
if "Marketing" in j["parentName"]:
d["level1"] += [j["name"]]
if "Advertising" in j["parent"]:
d["level2"] += [j["name"]]
Attendez-vous à 2 ID
test = [{"id":"100","name":"A",
"Business":[{"id":"7","name":"Enterprise"},
{"id":"8","name":"Customer"}],
"policies":[{"id":"332","name":"Second division","parent":"Marketing"},
{"id":"3323","name":"First division","parent":"Marketing"}]},
{"id":"101","name":"B",
"Business":[{"id":"7","name":"Enterprise"},
{"id":"8","name":"Customer"}],
"policies":[{"id":"332","name":"Second division","parent":"Marketing"},
{"id":"3323","name":"First division","parent":"Marketing"}]}]
3 Réponses :
Mis à jour pour refléter les modifications . Je suppose que les clés manquantes signifient que vous voudriez ignorer ce dictionnaire particulier.
def filter_policies(employee, parent):
return [policy['name'] for policy in employee['policies'] if policy['parent'] == parent]
def process_employee(employee):
return {'id': employee['id'], 'name': employee['name'],
'Business': [business['name'] for business in employee['Business']],
'level1': filter_policies(employee, 'Marketing'),
'level2': filter_policies(employee, 'Advertising')}
output = []
for employee in test:
try:
item = process_employee(employee)
except KeyError:
pass # ignore employees with missing dictionary keys
else:
output.append(item)
que va-t-il faire si un identifiant n'a pas d'activité ou toute autre clé qui recherche son erreur de clé d'erreur de lancement, comment gérer cela
Vous pouvez utiliser try / sauf pour gérer les exceptions. Si certaines clés peuvent manquer, veuillez modifier votre question et spécifier les conditions exactes, de cette façon, nous saurons comment y faire face au mieux.
Votre code échoue, j'ai changé la clé Entreprise en Profession ou toute autre clé. attendue est toujours Business est là avec [].
Si vous modifiez la clé dans votre saisie, vous devez également modifier la clé dans le code.
Pour cela, entrée fixe (car dans votre exemple le test dict a des clés dupliquées)
def do_the_thing(lst):
resp = []
parents_mapper = {
'Marketing': 'level1',
'Advertising': 'level2'
}
for el in lst:
d = {
'id': el['id'],
'name': el['name'],
'Business': [],
'level1': [],
'level2': []
}
for business in el.get('Business', []):
business_name = business.get('name')
if business_name:
d['Business'].append(business_name)
for policy in el.get('policies', []):
policy_parent = policy.get('parent')
parent_found = parents_mapper.get(policy_parent)
policy_name = policy.get('name')
if parent_found and policy_name:
d[parent_found].append(policy_name)
resp.append(d)
return resp
if __name__ == "__main__":
import pprint
pp = pprint.PrettyPrinter(4)
pp.pprint(do_the_thing(test))
Ce code fera ce que vous voulez
XXX
que va-t-il faire si un identifiant n'a pas d'activité ou toute autre clé qui recherche son erreur de clé d'erreur de lancement, comment gérer cela
J'ai ajusté ma réponse avec .get supplémentaire afin que toutes ces clés puissent être manquantes maintenant.
Comment passer si une entreprise est [] Je dois passer Aucun à la liste
Souhaitant gagner le prix du code le plus laid ici aujourd'hui, voici une solution utilisant uniquement des compréhensions:
[{'id': '100',
'name': 'A',
'Business': ['Enterprise', 'Customer'],
'level1': ['Second division', 'First division'],
'level2': []},
{'id': '101',
'name': 'B',
'Business': ['Enterprise', 'Customer'],
'level1': ['Second division', 'First division'],
'level2': []}]
Résultat:
x = [{**d, "Business": [i["name"] for i in d["Business"]],
"level1": [i["name"] for i in d["policies"] if i["parent"] == "Marketing"],
"level2": [i["name"] for i in d["policies"] if i["parent"] == "Advertising"],
} for d in test]
[d.pop("policies") for d in x]
pprint.pprint(x, sort_dicts=False)
p >
que va-t-il faire si un identifiant n'a pas d'activité ou toute autre clé qui recherche son erreur de clé d'erreur de lancement, comment gérer cela
@aysh Ensuite, je suggérerais de changer le pour x dans d ["stufftocheck"] en pour x dans d.get ("stufftocheck", []) .
dict que vous avez publié a des clés en double, pensez à reformater le code.
@Sushanth sa liste de dictionnaire et non de dictionnaire
Il existe deux clés en double nommées
"id"et"name". ("id": "100", "name": "A" code > était couvert par"id": "101", "name": "A").@Sushanth modifié en B
@jizhihaoSAMA modifié en B
Votre modification ne le résout pas, vous pouvez utiliser
pprint.pprintpour voir clairement votre résultat.Vous devez insérer
}, {avant"id": "101", "name": "B",@Jasmijn édité merci pour l'œil
@jizhihaoSAMA édité merci