Título: Como puedo cambiar los diccionarios por listas en este programa Publicado por: Skewer en 26 Febrero 2020, 00:54 am print('Menú de opciones')
print('') print('Escriba una de estas opciones: \n1: Estadisticos de personas \n2: Recomendador por genero y edad \n3: Ranking') print('') print('Estos son los géneros disponibles:\nAction Adventure Animation\nChildren’s Comedy Crime\nDocumentary Drama Fantasy\nFilm-Noir Horror Musical\nMystery Romance Sci-Fi\nThriller War Western') print('') n=str(input('Opción:')) usuario=open('usuarios.csv') notas=open('notas.csv') peliculas=open('peliculas.csv') if n=='1': print('Estadisticos de personas') genero=str(input('Ingrese genero de la persona:')) categoria=str(input('Ingrese genero pelicula:')) diccionario={} for linea in usuario: ax=linea.strip().split(',') if ax[1]==genero: diccionario[ax[0]]=[ax[2]] usuario.close() listacategoria=[] for linea in peliculas: ax2=linea.strip().split(',') if categoria in ax2[2]: listacategoria.append(ax2[0]) peliculas.close() rev='' for linea in notas: ax3=linea.strip().split(',') if (ax3[1] in listacategoria) and (rev!=ax3[0]) and (ax3[0] in diccionario): diccionario[ax3[0]].append('v') rev=ax3[0] notas.close() #Dividimos los rangos etarios re_1=0 re_18=0 re_25=0 re_35=0 re_45=0 re_50=0 re_56=0 for f in diccionario: if 'v' in diccionario[f]: if diccionario[f][0]=='1': re_1+=1 elif diccionario[f][0]=='18': re_18+=1 elif diccionario[f][0]=='25': re_25+=1 elif diccionario[f][0]=='35': re_35+=1 elif diccionario[f][0]=='45': re_45+=1 elif diccionario[f][0]=='50': re_50+=1 elif diccionario[f][0]=='56': re_56+=1 print('Rango menor 18:',re_1) print('Rango 18-24:',re_18) print('Rango 25-34:',re_25) print('Rango 35-44:',re_35) print('Rango 45-49:',re_45) print('Rango 50-55:',re_50) print('Rango mayor 56:',re_56) elif n=='2': print('Recomendador por género y edad') Edad=int(input('Ingrese su edad:')) Gender=str(input('Ingrese su género:')) if Edad in range(1,18): Re='1' elif Edad in range(18,25): Re='18' elif Edad in range(25,35): Re='25' elif Edad in range(35,45): Re='35' elif Edad in range(45,50): Re='45' elif Edad in range(50,56): Re='50' elif Edad>=56: Re='56' IDE=[] for linea in usuario: ax4=linea.strip().split(',') if ax4[1]==Gender and ax4[2]==Re: IDE.append(ax4[0]) usuario.close() IDEPN={} for linea in notas: ax5=linea.strip().split(',') if (ax5[0] in IDE) and (ax5[1] not in IDEPN): IDEPN[ax5[1]]=[int(ax5[2]),(1)] elif (ax5[0] in IDE) and (ax5[1] in IDEPN): IDEPN[ax5[1]]=[int(IDEPN[ax5[1]][0])+int(ax5[2]),int(IDEPN[ax5[1]][1])+(1)] notas.close() diccionario2={} for y in IDEPN: if int(IDEPN[y][1])>=10: diccionario2[y]=float(IDEPN[y][0])/float(IDEPN[y][1]) IDEmaxima='' maximo=-float('inf') for ID in diccionario2: if diccionario2[ID]>=maximo: maximo=diccionario2[ID] IDEmaxima=ID Pelicula_Recomendada='' for linea in peliculas: ax6=linea.strip().split(',') if IDEmaxima==ax6[0]: Pelicula_Recomendada=ax6[1] peliculas.close() print(Pelicula_Recomendada) elif n=='3': print('Ranking') categoria2=str(input('Ingrese genero pelicula:')) idn=[] for linea in peliculas: ax7=linea.strip().split(',') if categoria2 in ax7[2]: idn.append(ax7[0]) dicnota={} for linea in notas: ax8=linea.strip().split(',') if (ax8[1] in idn) and (ax8[1] not in dicnota): dicnota[ax8[1]]=[int(ax8[2]),int(1)] elif (ax8[1] in idn)and (ax8[1]in dicnota): dicnota[ax8[1]]=[int(dicnota[ax8[1]][0])+int(ax8[2]),int(dicnota[ax8[1]][1])+int(1)] promedio={} for f in dicnota: if int(dicnota[f][1])>=10: promedio[f]=(float(dicnota[f][0])/float(dicnota[f][1])) import operator #sacado de internet https://www.analyticslane.com/2019/01/14/ordenacion-de-diccionarios-en-python-mediante-clave-o-valor/ promedio_orden=sorted(promedio.items(),key=operator.itemgetter(1), reverse=True) cont=0 toppelis=[] for linea in promedio_orden: cont+=1 toppelis.append([linea[0],linea[1]]) if cont==10: break peliculas3=open('peliculas.csv') for a in peliculas3: axtop=a.strip().split(',') if toppelis[0][0]==axtop[0]: toppelis[0][0]=axtop[1] peliculas3.close peliculas3=open('peliculas.csv') for a in peliculas3: axtop=a.strip().split(',') if toppelis[1][0]==axtop[0]: toppelis[1][0]=axtop[1] peliculas3.close peliculas3=open('peliculas.csv') for a in peliculas3: axtop=a.strip().split(',') if toppelis[2][0]==axtop[0]: toppelis[2][0]=axtop[1] peliculas3.close peliculas3=open('peliculas.csv') for a in peliculas3: axtop=a.strip().split(',') if toppelis[3][0]==axtop[0]: toppelis[3][0]=axtop[1] peliculas3.close peliculas3=open('peliculas.csv') for a in peliculas3: axtop=a.strip().split(',') if toppelis[4][0]==axtop[0]: toppelis[4][0]=axtop[1] peliculas3.close peliculas3=open('peliculas.csv') for a in peliculas3: axtop=a.strip().split(',') if toppelis[5][0]==axtop[0]: toppelis[5][0]=axtop[1] peliculas3.close peliculas3=open('peliculas.csv') for a in peliculas3: axtop=a.strip().split(',') if toppelis[6][0]==axtop[0]: toppelis[6][0]=axtop[1] peliculas3.close peliculas3=open('peliculas.csv') for a in peliculas3: axtop=a.strip().split(',') if toppelis[7][0]==axtop[0]: toppelis[7][0]=axtop[1] peliculas3.close peliculas3=open('peliculas.csv') for a in peliculas3: axtop=a.strip().split(',') if toppelis[8][0]==axtop[0]: toppelis[8][0]=axtop[1] peliculas3.close peliculas3=open('peliculas.csv') for a in peliculas3: axtop=a.strip().split(',') if toppelis[9][0]==axtop[0]: toppelis[9][0]=axtop[1] peliculas3.close arch=open('top'+categoria2+'.txt','w') arch.write('1,'+str(toppelis[0][0])+','+str(round(toppelis[0][1],2))+'\n') arch.write('2,'+str(toppelis[1][0])+','+str(round(toppelis[1][1],2))+'\n') arch.write('3,'+str(toppelis[2][0])+','+str(round(toppelis[2][1],2))+'\n') arch.write('4,'+str(toppelis[3][0])+','+str(round(toppelis[3][1],2))+'\n') arch.write('5,'+str(toppelis[4][0])+','+str(round(toppelis[4][1],2))+'\n') arch.write('6,'+str(toppelis[5][0])+','+str(round(toppelis[5][1],2))+'\n') arch.write('7,'+str(toppelis[6][0])+','+str(round(toppelis[6][1],2))+'\n') arch.write('8,'+str(toppelis[7][0])+','+str(round(toppelis[7][1],2))+'\n') arch.write('9,'+str(toppelis[8][0])+','+str(round(toppelis[8][1],2))+'\n') arch.write('10,'+str(toppelis[9][0])+','+str(round(toppelis[9][1],2))+'\n') arch.close() else: print('Entrada inválida') |