#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Oct 16 11:18:03 2018 @author: andrea """ agenda = [ { 'cognome': 'Paperino', 'nome': 'Paolino', 'tel': '555-6789', 'indirizzo': 'via del Pero 113' }, { 'cognome': 'De Goofs', 'nome': 'Pippo', 'tel': '555-12345', 'indirizzo': 'via del Susino 42' }, { 'cognome': 'Minoprio', 'nome': 'Minnie', 'tel': '555-321567', 'indirizzo': 'via del\'Arancio 666' }, { 'cognome': 'Mucchini', 'nome': 'Clarabella', 'tel': '555-777777', 'indirizzo': 'via delle Fragole 12' }, ] agenda1 = [ { 'cognome': 'XXXPaperino', 'nome': 'XXXPaolino', 'tel': '555-6789', 'indirizzo': 'via del Pero 113' }, { 'cognome': 'XXXDe Goofs', 'nome': 'XXXPippo', 'tel': '555-12345', 'indirizzo': 'via del Susino 42' }, { 'cognome': 'XXXMinoprio', 'nome': 'XXXMinnie', 'tel': '555-321567', 'indirizzo': 'via del\'Arancio 666' }, { 'cognome': 'XXXMucchini', 'nome': 'XXXClarabella', 'tel': '555-777777', 'indirizzo': 'via delle Fragole 12' }, ] def ordina(agenda, campo): def estrai_campo(elemento): return elemento[campo] return sorted(agenda, key=estrai_campo ) # usando una funzione anonima def ordina2(agenda, campo): return sorted(agenda, key=lambda elemento : elemento[campo] ) # per estrarre una sotto tabella # inizialmente il risultato è [] # per ogni elemento dell'agenda # aggiungo al risultato un dizionario dei soli campi che mi interessano # ritorno il risultato def estrai_sottotabella(agenda, campi): risultato = [] for el in agenda: d = {} for campo in campi: d[campo] = el[campo] risultato.append(d) return risultato def estrai_sottotabella2(agenda, campi): return [ { campo : el[campo] for campo in campi } for el in agenda ] def cerca(agenda, nome): for el in agenda: if el['nome'] == nome: return el['tel'] return "non c'è quel nome" def crea_indice(agenda, campo): risultato = {} for i, el in enumerate(agenda): chiave = el[campo] risultato[chiave] = i return risultato def crea_indice2(agenda, campo): return { el[campo]: i for i, el in enumerate(agenda) } if __name__ == '__main__': from pprint import pprint #pprint(ordina2(agenda1, 'tel')) #pprint(ordina2(agenda1, 'cognome')) #pprint(estrai_sottotabella2(agenda1, ['tel','cognome'])) #print( 'yyy', cerca(agenda, 'yyy')) #print( 'Paolino', cerca(agenda, 'Paolino')) indice_nome = crea_indice(agenda, 'nome') print(agenda[indice_nome['Pippo']]) indice_nome2 = crea_indice2(agenda, 'nome') print(agenda[indice_nome2['Pippo']])