def secondReq(catalog, country): """ Completa el requerimiento #2 """ new_map = mp.newMap(50000, 50007, 'PROBING', 0.80, None) for videos in catalog["videos"]["table"]["elements"]: if videos["key"] != None: for video in lt.iterator(videos["value"]["videos"]): if str(video["country"]).lower() == str(country).lower(): value = { "title": video["title"], "channel": video["channel_title"], "count": "1" } key = video["title"] exists = mp.contains(new_map, key) if not exists: mp.put(new_map, key, value) else: new_value = mp.get(new_map, key) new_value["value"]["count"] = str( int(new_value["value"]["count"]) + 1) mp.put(new_map, key, new_value["value"]) new_list = lt.newList('ARRAY_LIST', cmpfunction=cmpVideosByTrendingdays) for element in new_map["table"]["elements"]: if element["key"] != None: lt.addLast(new_list, element["value"]) sorted_list = quick.sort(new_list, cmpVideosByTrendingdays) result = lt.firstElement(sorted_list) result["country"] = country return result
def frequencyInMap(entry, frequencyEntry): """ Funcion Auxiliar para sacar la frecuencia de las llaves en un mapa visto como histagrama Args: entry: una entrada de un map frequencyEntry: map ADT """ key = entry['key'] num_acc = entry['value'] try: mp.get(frequencyEntry, key)['value'] += num_acc except TypeError: mp.put(frequencyEntry, key, num_acc) return frequencyEntry
def updateIndex(Index, indexKey): """ Actualiza el conteo del mapa Index con su indexKey Args: Index: El map indexKey: la llave que se quiere actualizar Returns: """ indexEntry = mp.get(Index, indexKey) if indexEntry: indexEntry['value'] += 1 else: mp.put(Index, indexKey, 1) return Index
def addMoviepais(catalog, movie): """ Esta funcion adiciona un libro a la lista de libros que fueron publicados en un año especifico. Los años se guardan en un Map, donde la llave es el año y el valor la lista de libros de ese año. """ productora = catalog['paises'] producmo = movie["production_countries"] existpro = mp.contains(productora, producmo) if existpro: entry = mp.get(productora, producmo) pro = me.getValue(entry) else: pro = lt.newList('SINGLE_LINKED', compareMovieName) mp.put(productora, producmo, pro) if productora['size'] / productora['capacity'] > productora['loadfactor']: catalog["paises"] = mp.rehash(productora) lt.addLast(pro, movie)
def addMoviedirector(catalog, movie): """ Esta funcion adiciona un libro a la lista de libros que fueron publicados en un año especifico. Los años se guardan en un Map, donde la llave es el año y el valor la lista de libros de ese año. """ directores = catalog['directores'] director = movie["director_name"] existpro = mp.contains(directores, director) if existpro: entry = mp.get(directores, director) pro = me.getValue(entry) else: pro = lt.newList('SINGLE_LINKED', compareMovieName) mp.put(directores, director, pro) if directores['size'] / directores['capacity'] > directores['loadfactor']: catalog['directores'] = mp.rehash(directores) lt.addLast(pro, movie)
def thirdReq(catalog, category): """ Completa el requerimiento #3 """ for cate in catalog["categories"]["table"]["elements"]: try: if int(cate["key"]) == int(category): info = cate["value"]["videos"] break except: pass new_map = mp.newMap(50000, 50007, 'PROBING', 0.80, None) i = 1 t = lt.size(info) x = 0 while i <= t: elem = lt.getElement(info, i) value = { "title": elem["title"], "channel": elem["channel_title"], "count": 1 } key = elem["title"] exists = mp.contains(new_map, key) if not exists: mp.put(new_map, key, value) else: new_value = mp.get(new_map, key) key = elem["title"] new_value["value"]["count"] += 1 mp.put(new_map, key, new_value["value"]) i += 1 new_list = lt.newList() for element in new_map["table"]["elements"]: if element["key"] != None: lt.addLast(new_list, element["value"]) sorted_list = quick.sort(new_list, cmpVideosByTrendingdays) result = lt.firstElement(sorted_list) result["cat"] = category return result
def addGeneres(catalog, movie): """ Esta funcion adiciona un libro a la lista de libros que fueron publicados en un año especifico. Los años se guardan en un Map, donde la llave es el año y el valor la lista de libros de ese año. """ c_generes = catalog['genres'] str_generes = movie["genres"] genres = str_generes.split("|") for genre in genres: existpro = mp.contains(c_generes, genre) if existpro: entry = mp.get(c_generes, genre) gen = me.getValue(entry) else: gen = lt.newList('SINGLE_LINKED', compareMovieName) mp.put(c_generes, genre, gen) if c_generes['size'] / c_generes['capacity'] > c_generes['loadfactor']: catalog['genres'] = mp.rehash(c_generes) lt.addLast(gen, movie)
def put(map, key, value): """ Ingresa una pareja llave,valor a la tabla de hash. Si la llave ya existe en la tabla, se reemplaza el valor Args: map: El map a donde se guarda la pareja key: la llave asociada a la pareja value: el valor asociado a la pareja Returns: El map Raises: Exception """ return ht.put(map, key, value)
def addActor(catalog, movie): """ Esta funcion adiciona un libro a la lista de libros que fueron publicados en un año especifico. Los años se guardan en un Map, donde la llave es el año y el valor la lista de libros de ese año. """ c_actors = catalog['actors'] keys = ["actor1_name", "actor2_name", "actor3_name", "actor4_name", "actor5_name"] actors = [movie[key] for key in keys] for actor in actors: existpro = mp.contains(c_actors, actor) if existpro: entry = mp.get(c_actors, actor) act = me.getValue(entry) else: act = lt.newList('SINGLE_LINKED', compareMovieName) mp.put(c_actors, actor, act) if c_actors['size'] / c_actors['capacity'] > c_actors['loadfactor']: catalog['actors'] = mp.rehash(c_actors) lt.addLast(act, movie)
def addVideo(catalog, video): """ Esta funcion adiciona un video a la lista de videos teniendo como llave su video_id, adicionalmente lo guarda en un Map usando como llave su número de categoría. """ cont = mp.contains(catalog["videos"], video["video_id"]) if not cont: structure = newVideo() lt.addLast(structure["videos"], video) mp.put(catalog["videos"], video["video_id"], structure) else: pareja = mp.get(catalog["videos"], video["video_id"]) llave = pareja["key"] valor = pareja["value"] lt.addLast(valor["videos"], video) mp.put(catalog["videos"], llave, valor) for cate in catalog["categories"]["table"]["elements"]: if cate["key"] == video["category_id"]: try: space = cate["value"]["videos"] lt.addLast(space, video) except: pass
def addCategory(catalog, category, mapvalue): # Se adiciona la categoria al map de categorias mp.put(catalog["categories"], category, mapvalue)