2 votes

python : récupérer le dernier dictionnaire correspondant dans une liste

Comment obtenir le dernier dictionnaire correspondant dans une liste de dictionnaires :

Exemple :

test_dict={'user'='xxx','tasks':[{'id':'01','age':'60'},{'id':'02','age':'50'},{'id':'01','age':'65'},{'id':'02','age':'65'}]}

Comment puis-je obtenir la dernière dictée des tâches dont l'identifiant est '01' ?

Dois-je itérer à travers la liste entière - test_dict['tasks'] ou existe-t-il une bonne approche ?

Gracias

1voto

hygull Points 2386

@Aavik vous pouvez essayer le code ci-dessous.

J'ai utilisé filtre() pour filtrer les dictionnaires avec des clés spécifiques.

Essayez le code en ligne à http://rextester.com/URYZW46252 (méthode moins efficace utilisant filtre() fonction).

Essayez aussi http://rextester.com/HLVQL50077 (en utilisant compréhension de la liste ce qui est un moyen efficace).

def get_last_dict_with_specific_id(test_dict, id):
    # Create tasks list from test_dict
    tasks = test_dict["tasks"]

    # filter tasks list based on dictionaries id i.e get a list of dictionaries with only specific id
    # Update the same list tasks with different content (save space)
    tasks = [d for d in tasks if d["id"] == id]
    # tasks = filter(lambda d: d["id"] == id, tasks) # This is efficient like above one

    # Pick the last dictionary and return it
    if tasks:
        return tasks[len(tasks) - 1]
    else:
        return {}

# TEST    

test_dict = {'user': 'xxx','tasks': [{'id':'01','age':'60'},{'id':'02','age':'50'},{'id':'01','age':'65'},{'id':'02','age':'65'}]};

last_dict_01 = get_last_dict_with_specific_id(test_dict, '01');
print last_dict_01;  # {'age': '65', 'id': '01'}

last_dict_02 = get_last_dict_with_specific_id(test_dict, '02');
print last_dict_02;  # {'age': '65', 'id': '02'}

last_dict_03 = get_last_dict_with_specific_id(test_dict, '03');
print last_dict_03;  # {}

0voto

jpp Points 83462

Vous pouvez utiliser next avec une expression génératrice qui itère la liste en sens inverse. Si aucune correspondance n'est trouvée, la fonction retournera None .

def get_last(d, val):
    return next((i for i in reversed(d['tasks']) if i['id'] == val), None)

res = get_last(test_dict, '01')

print(res)

{'id': '01', 'age': '65'}

-1voto

yadhu Points 731

Cela devrait servir votre objectif.

test_dict={'user':'xxx','tasks':[{'id':'01','age':'60'},{'id':'02','age':'50'},{'id':'01','age':'65'},{'id':'02','age':'65'}]}

id_key = '01'

id_value = {}

tasks = test_dict['tasks']

for i in reversed(tasks):
    if(i['id'] == id_key):
        id_value = i
        break;

print "Found key"      
print id_value

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X