#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Fri Oct 25 10:36:25 2019 @author: andrea """ agenda = [ { 'nome': 'Paperino', 'tel' : '555113113', 'indirizzo' : 'Via del pero 113'}, { 'nome': 'Minnie', 'tel' : '555117171', 'indirizzo' : 'Via del castagno 114'}, { 'nome': 'Topolino', 'tel' : '56251451', 'indirizzo' : 'Via del melo 110'}, { 'nome': 'Paperoga', 'tel' : '243124215', 'indirizzo' : 'Via del tarlo 112'}, { 'nome': 'Gastone', 'tel' : '573753477', 'indirizzo' : 'Via del nano da giardino 11'}, { 'nome': 'Paperon de Paperoni', 'tel' : '143541265', 'indirizzo' : 'Via del gigante 1'}, { 'nome': 'Qui', 'tel' : '555113113', 'indirizzo' : 'Via del pero 113'}, { 'nome': 'Quo', 'tel' : '555113113', 'indirizzo' : 'Via del pero 113'}, { 'nome': 'Qua', 'tel' : '555113113', 'indirizzo' : 'Via del pero 113'}, ] # per generare un indice per una certa informazione X ('tel', 'nome', 'indirizzo') # all'inizio la tabella รจ vuota # scandisco la lista dei dizionari # per costruire una tabella valore -> [ lista di posizioni ] # NOTA: se usiamo un dizionario avremo UN solo valore come chiave # se esistono valori identici nella tabella mettiamo come valore una lista di indici # estraggo dalla scheda il valore del campo X desiderato # ne aggiungo la posizione alla tabella # tornare la tabella def genera_indice(lista_di_dizionari, nome_del_campo): tabella = {} for pos, dizionario in enumerate(lista_di_dizionari): valore = dizionario[nome_del_campo] if valore in tabella: tabella[valore].append(pos) else: tabella[valore] = [pos] return tabella # per generare un indice UNICO per una certa informazione X ('tel', 'nome', 'indirizzo') # se invece vogliamo solo l'ultima occorrenza # possiamo costruire una tabella valore -> posizione def genera_indice_unico(lista_di_dizionari, nome_del_campo): # stavolta uso la list-comprehension return { dizionario[nome_del_campo] : pos for pos, dizionario in enumerate(lista_di_dizionari) } # list comprehension #list [ valore for ..... if .... ] #dict { chiave : valore for .... if } #set { valore for ... in ... if ....} lista = [] for x in range(1, 11): if x%2: for y in range(1, 11): if x==y: lista.append(x*y) lista2 = [ x*y for x in range(1,11) if x%2 for y in range(1, 11) if x==y ] assert lista == lista2 lista_di_cubi_e_quadrati = [ x*x if x%2 else x**3 for x in range(20) ]