Beispiel #1
0
def a_star():
    tree_root = IntermediaryNode(IntermediaryNode.problem.start_node)
    open = [tree_root]
    closed = []

    while len(open) > 0:
        curr_node = open.pop(0)
        closed.append(curr_node)

        if curr_node.test_end():
            break

        for node in curr_node.expand():
            if not curr_node.already_in_tree(node):
                node_open = in_list(open, node)
                if node_open is not None and node_open.f > node.f:
                    open.remove(node_open)
                    open.append(node)
                node_closed = in_list(closed, node)
                if node_closed is not None and node_closed.f > node.f:
                    closed.remove(node_closed)
                    open.append(node)
                if node_closed is None and node_open is None:
                    open.append(node)
                open = sorted(sorted(open, key=attrgetter('g'), reverse=True),
                              key=attrgetter('f'))

    print("\n------------------ Concluzie -----------------------")
    if len(open) == 0:
        print("Lista open e vida, nu avem drum solutie")
    else:
        print("Drum de cost minim: ")
        print_solution(curr_node)
 def test_repr_attrgetter(self):
     import _operator as operator
     assert repr(operator.attrgetter("foo")) == "operator.attrgetter('foo')"
     assert repr(operator.attrgetter(
         "foo", 'bar')) == ("operator.attrgetter('foo', 'bar')")
     assert repr(operator.attrgetter("foo.bar")) == (
         "operator.attrgetter('foo.bar')")
     assert repr(operator.attrgetter(
         "foo", 'bar.baz')) == ("operator.attrgetter('foo', 'bar.baz')")
    def test_dotted_attrgetter(self):
        from _operator import attrgetter

        class A:
            pass

        a = A()
        a.name = "hello"
        a.child = A()
        a.child.name = "world"
        a.child.foo = "bar"
        assert attrgetter("child.name")(a) == "world"
        assert attrgetter("child.name", "child.foo")(a) == ("world", "bar")
Beispiel #4
0
 def Sort(self):
     '''
     sorts the list by name
     '''
     allDTO = self.getDTO()
     allDTO = sorted(allDTO, key=attrgetter('name', 'Grade'), reverse=False)
     return allDTO
Beispiel #5
0
 def group(self, group):
     rez = []
     for c in self.list:
         if c.get_group().strip() == group:
             rez.append(c)
     rez = sorted(rez, key = attrgetter('name'))
     return rez
Beispiel #6
0
 def tournament_selection_func(self, population):
     """Select a random number of individuals from the population and
     return the fittest member of them all.
     """
     ##log.info("tournament selection...")
     members = random.sample(population, self.tournament_size)
     members.sort(key=attrgetter('fitness'), reverse=self.maximise_fitness)
     return members[0]
def optimal_points(segments):
    points = []
    segments = sorted(segments, key=attrgetter('end'))
    max_right = segments[0].end
    points.append(max_right)
    i = 1
    while i < len(segments):
        if max_right < segments[i].start:
            max_right = segments[i].end
            points.append(max_right)
        i += 1
    return points
Beispiel #8
0
 def export(self, file):
     all = BikeRepo.getAll(self)
     all = sorted(all, key= attrgetter('price'))
     f = open(file, 'w')
     for b in all:
         bf = str(b.get_id() + "|" + b.get_type() + "|" + str(b.get_price())) + "\n"
         f.write(bf)
     f.close()
     
     
     
     
Beispiel #9
0
 def wykonaj_ture(self):
     self.__rozmiar_ruchu_inicjatywy = self.__ruch.__len__()
     self.__iterator_organizmow = 0
     self.__ruch.sort(key=attrgetter('_inicjatywa', '_sila'), reverse=True)
     for self.__iterator_organizmow in range(
             0, self.__rozmiar_ruchu_inicjatywy):
         if (self.__iterator_organizmow < self.__ruch.__len__()) and (
                 self.__ruch[self.__iterator_organizmow] != None):
             self.__ruch[self.__iterator_organizmow].akcja()
     for j in range(0, self.__rozmiar_ruchu_inicjatywy):
         if (j < self.__ruch.__len__()) and (self.__ruch[j] != None):
             self.__ruch[j].postarz_organizm()
     self.rysuj_swiat()
Beispiel #10
0
def getOpinions():
    r = requests.get(url)
    soup = BeautifulSoup(r._content)
    opin = soup.find_all("span")
    count = 0
    temp_opinion = []
    temp_preopin = []
    temp_lwopin = []
    temp_lmopin = []
    for cont in opin:
        if "+" in cont.text or "-" in cont.text or "unch" in cont.text:
            count = 0
        else:
            if "Buy" in cont.text:
                if (count == 0):
                    temp_opinion.append(cont.text.split("%")[0])
                elif (count == 1):
                    temp_preopin.append(cont.text.split("%")[0])
                elif (count == 2):
                    temp_lwopin.append(cont.text.split("%")[0])
                elif (count == 3):
                    temp_lmopin.append(cont.text.split("%")[0])
                count+=1
            elif "Sell" in cont.text:
                if (count == 0):
                    temp_opinion.append(int("-"+cont.text.split("%")[0]))
                elif (count == 1):
                    temp_preopin.append(int("-"+cont.text.split("%")[0]))
                elif (count == 2):
                    temp_lwopin.append(int("-"+cont.text.split("%")[0]))
                elif (count == 3):
                    temp_lmopin.append(int("-"+cont.text.split("%")[0]))
                count+=1
            elif "Hold" in cont.text:
                if (count == 0):
                    temp_opinion.append(0)
                elif (count == 1):
                    temp_preopin.append(0)
                elif (count == 2):
                    temp_lwopin.append(0)
                elif (count == 3):
                    temp_lmopin.append(0)
                count+=1
    for i in range(len(CompanyList)):
        CompanyList[i].setOpinion(temp_opinion[i])
        CompanyList[i].setPreopin(temp_preopin[i])
        CompanyList[i].setLWopin(temp_lwopin[i])
        CompanyList[i].setLMopin(temp_lmopin[i])
        CompanyList[i].getScore()
    CompanyList.sort(key=_operator.attrgetter('score'), reverse=True)
Beispiel #11
0
def getOpinions():
    r = requests.get(url)
    soup = BeautifulSoup(r._content)
    opin = soup.find_all("span")
    count = 0
    temp_opinion = []
    temp_preopin = []
    temp_lwopin = []
    temp_lmopin = []
    for cont in opin:
        if "+" in cont.text or "-" in cont.text or "unch" in cont.text:
            count = 0
        else:
            if "Buy" in cont.text:
                if (count == 0):
                    temp_opinion.append(cont.text.split("%")[0])
                elif (count == 1):
                    temp_preopin.append(cont.text.split("%")[0])
                elif (count == 2):
                    temp_lwopin.append(cont.text.split("%")[0])
                elif (count == 3):
                    temp_lmopin.append(cont.text.split("%")[0])
                count += 1
            elif "Sell" in cont.text:
                if (count == 0):
                    temp_opinion.append(int("-" + cont.text.split("%")[0]))
                elif (count == 1):
                    temp_preopin.append(int("-" + cont.text.split("%")[0]))
                elif (count == 2):
                    temp_lwopin.append(int("-" + cont.text.split("%")[0]))
                elif (count == 3):
                    temp_lmopin.append(int("-" + cont.text.split("%")[0]))
                count += 1
            elif "Hold" in cont.text:
                if (count == 0):
                    temp_opinion.append(0)
                elif (count == 1):
                    temp_preopin.append(0)
                elif (count == 2):
                    temp_lwopin.append(0)
                elif (count == 3):
                    temp_lmopin.append(0)
                count += 1
    for i in range(len(CompanyList)):
        CompanyList[i].setOpinion(temp_opinion[i])
        CompanyList[i].setPreopin(temp_preopin[i])
        CompanyList[i].setLWopin(temp_lwopin[i])
        CompanyList[i].setLMopin(temp_lmopin[i])
        CompanyList[i].getScore()
    CompanyList.sort(key=_operator.attrgetter('score'), reverse=True)
Beispiel #12
0
def a_star():
    rad_arbore = NodParcurgere(NodParcurgere.problema.nod_start)
    open = [rad_arbore]  # open va contine elemente de tip NodParcurgere
    closed = []  # closed va contine elemente de tip NodParcurgere

    while len(open) > 0:
        print(str_info_noduri(open))  # afisam lista open
        nod_curent = open.pop(0)
        closed.append(nod_curent)

        if nod_curent.test_scop():
            break

        expandare = [
            NodParcurgere(nod_graf=nod,
                          parinte=nod_curent,
                          g=nod_curent.g + cost)
            for (nod, cost) in nod_curent.expandeaza()
        ]

        for s in expandare:
            if not nod_curent.contine_in_drum(s):
                node_open = in_lista(open, s)
                if node_open is not None and node_open.f > s.f:
                    open.remove(node_open)
                open.append(s)
                open = sorted(sorted(open, key=attrgetter('g'), reverse=True),
                              key=attrgetter('f'))

    print("\n------------------ Concluzie -----------------------")
    if len(open) == 0:
        print(
            "Lista open e vida, nu avem drum de la nodul start la nodul scop")
    else:
        print("Drum de cost minim: " +
              str_info_noduri(nod_curent.drum_arbore()))
def dynSolve (p):

    for row in range(p.height -2 ,-1,-1):
        #print(str(row) + ":")
        for i in range(0,len(p.nums[row])):
            p.nums[row][i].minimumPathValue += min(p.nums[row+1][i].minimumPathValue,p.nums[row+1][i+1].minimumPathValue)

    print("after finding path values:" + str(p))
    
    
    i = 0
    for h in range(0,len(p.nums)-1):
        row = p.nums[h+1]
        i = row.index(min(row[i],row[i+1],key=attrgetter('minimumPathValue')))
        print (str(i))
def dynSolve(p):

    for row in range(p.height - 2, -1, -1):
        #print(str(row) + ":")
        for i in range(0, len(p.nums[row])):
            p.nums[row][i].minimumPathValue += min(
                p.nums[row + 1][i].minimumPathValue,
                p.nums[row + 1][i + 1].minimumPathValue)

    print("after finding path values:" + str(p))

    i = 0
    for h in range(0, len(p.nums) - 1):
        row = p.nums[h + 1]
        i = row.index(
            min(row[i], row[i + 1], key=attrgetter('minimumPathValue')))
        print(str(i))
Beispiel #15
0
def _top_hits(result):
    ''' Return the top hit docs in the aggregation 'idxs'. '''
    top_hits = result.aggs['idxs'].get_docs_in_buckets(obj_document=ElasticSettings.getattr('DOCUMENT_FACTORY'))
    idx_names = list(top_hits.keys())
    for idx in idx_names:
        idx_key = ElasticSettings.get_idx_key_by_name(idx)
        if idx_key.lower() != idx:
            if idx_key.lower() == 'marker':
                top_hits[idx]['doc_count'] = _collapse_marker_docs(top_hits[idx]['docs'])
            elif idx_key.lower() == 'region':
                top_hits[idx]['doc_count'] = _collapse_region_docs(top_hits[idx]['docs'])
            elif idx_key.lower() == 'publication':
                # sort by date
                top_hits[idx]['docs'].sort(key=attrgetter('date'), reverse=True)

            top_hits[idx_key.lower()] = top_hits[idx]
            del top_hits[idx]
    return top_hits
    def test_getter_multiple_gest(self):
        import _operator as operator

        class A(object):
            pass

        a = A()
        a.x = 'X'
        a.y = 'Y'
        a.z = 'Z'

        assert operator.attrgetter('x', 'z', 'y')(a) == ('X', 'Z', 'Y')
        e = raises(TypeError, operator.attrgetter, ('x', (), 'y'))
        assert str(e.value) == "attribute name must be a string, not 'tuple'"

        data = list(map(str, range(20)))
        assert operator.itemgetter(2, 10, 5)(data) == ('2', '10', '5')
        raises(TypeError, operator.itemgetter(2, 'x', 5), data)
Beispiel #17
0
def recommended_event(request):
    context = {}
    rec_list = []
    rec_id = []
    events = Event.objects.all()
    rec_event = event_recommender(request.user.id)

    for x in rec_event:
        rec_list.append(filtering(int(x.__dict__['id']),float(x.__dict__['similarity'])))

    rec_list2 = sorted(rec_list, key=attrgetter('similarity'), reverse=True)
    for x in rec_list2:
        print("ID: " + str(x.id) +" Similarity :"+ str(x.similarity))
        rec_id.append(x.id)

    joined_event =  request.user.event_set.all()

    context = {'rec_id':rec_id,'events':events,'joined_event':joined_event}
    return render(request, "event/home.html", context)
Beispiel #18
0
 def best_modulo(self, *attrs):
     """
     Returns: best model according to validation error
     """
     from .models import TrainConfig
     pool_over = [
         CoreConfig(),
         ReadoutConfig(),
         Seed(),
         ShifterConfig(),
         ModulatorConfig(),
         TrainConfig()
     ]
     h = self.heading.primary_key
     for e in chain(*map(attrgetter('heading.primary_key'), pool_over),
                    attrs):
         if e not in attrs:
             h.remove(e)
     return self * dj.U(*h).aggr(
         self.proj('val_corr'),
         max_val='max(val_corr)') & 'val_corr = max_val'
Beispiel #19
0
    def rank_population(self):
        """Sort the population by fitness according to the order defined by
        maximise_fitness and choose the fittest individuals if the current population size exceeds
        the maximum population size
        """
        #log.info("rank_population...")
        self.current_generation.sort(key=attrgetter('fitness'),
                                     reverse=self.maximise_fitness)
        log.info(f"Current population size: {len(self.current_generation)}")
        if not self._duplicate_individuals:
            self._filter_out_duplicates_from_curr_gen()

        if self._constant_population_size and len(
                self.current_generation) < self.population_size:
            self._fill_curr_gen_with_random_individuals()
            assert len(
                self.current_generation
            ) == self.population_size, f"num individuals in current gen = {len(self.current_generation)} != {self.population_size} = population size do not match"
        else:
            self.current_generation = self.current_generation[:self.
                                                              population_size]
        log.info(f"Current population size: {len(self.current_generation)}")
Beispiel #20
0
def detect_outliers_subpopulation_lattice(
        filename,
        output='Result',
        output_path='',
        full_output=False,
        delimiter=',',
        quotechar='|',
        limit=25000,
        outlier_method='Outlier_LOF',
        #LOF for local outlier factor https://de.wikipedia.org/wiki/Local_Outlier_Factor
        min_population_size=30,
        threshold=3,
        threshold_avg=3,
        num_outliers=25,
        # Method specific parameters:
        k=5):
    '''Read input and create list of items.'''
    print('Read CSV ...')
    data = read_input_csv(filename, delimiter, quotechar, limit)
    filename_with_ID = filename

    items = data[0]
    features = data[1]

    #Sort items for LOF calculation.
    items.sort(key=attrgetter('target'))

    print(len(items), "items have been created.")
    """Create lattice."""
    lattice = Lattice(features, items)
    '''Generate subpopulations.'''
    print("Generate subpopulations...")
    lattice.generate_subpopulations(min_population_size=min_population_size)
    print(lattice.num_vertices(), "subpopulations have been created.")
    '''Apply outlier detection to the subpopulation lattice.'''
    print("Detect outliers...")
    lattice.detect_outliers(outlier_method, k)
    '''InputOutput scores.'''
    print("Write CSV ...")
    if full_output:
        print('full output ', output_path, output)
        write_csv(lattice, os.path.join(output_path, output + '_Scores.csv'))
        filename, dic = write_outlier(
            lattice, os.path.join(output_path, output + '_Outlier.csv'),
            threshold)
        write_outlier(lattice,
                      os.path.join(output_path, output + '_Outlier_Avg.csv'),
                      threshold_avg, 'avg_score')
        # return dumps({'filename': filename})
        print(dic)
        return dumps({"result": dic})
    else:
        output_file = output + '_top' + num_outliers.__str__() + '.csv'
        filename, dic = write_top_outlier(lattice,
                                          output_file,
                                          num_outliers,
                                          server_data_path=output_path)
        # return dumps({'filename': filename})
        print(dic)
        return dumps({"result": dic, "filename": filename_with_ID})
    return 0
 class A(object):
     getx = operator.attrgetter('x')
     get3 = operator.itemgetter(3)
     callx = operator.methodcaller("append", "x")
 def test_attrgetter_type(self):
     from _operator import attrgetter
     assert type(attrgetter("child.name")) is attrgetter
Beispiel #23
0
from _operator import attrgetter


class InventoryLine:
    """Class that represent an Inventory Line of sales"""
    def __init__(self, product, price, quantity):
        """Constructor of the Inventory"""
        self.product = product
        self.price = price
        self.quantity = quantity

    def __repr__(self):
        """print our attribute nicely"""
        return "<Inventory Line {} ({}/{})>".format(self.product, self.price,
                                                    self.quantity)


inventory = [
    InventoryLine("pomme rouge", 1.2, 19),
    InventoryLine("orange", 1.4, 24),
    InventoryLine("banane", 0.9, 21),
    InventoryLine("poire", 1.2, 24),
]

inventory.sort(key=attrgetter("quantity"), reverse=True)
print(sorted(inventory, key=attrgetter("price")))
Beispiel #24
0
 def getSightings(self,assumedLatitude='0d0.0',assumedLongitude='0d0.0'):
     if (not isinstance(assumedLatitude, str) or not isinstance(assumedLongitude, str)):
         raise ValueError('Fix.getSightings: both assumedLatitude and assumedLongitude have to be str')
     if assumedLatitude[0]=='S' or assumedLatitude[0]=='N':
         checkLatitude=assumedLatitude[1:]
         if not self.anglecheck(checkLatitude):
             raise ValueError('Fix.getSightings: not valid Latitude')
         if assumedLatitude[0]=='S':
             assumedLatitude='-'+checkLatitude
         else:
             assumedLatitude=checkLatitude
     else:
         if not assumedLatitude=='0d0.0':
             raise ValueError('Fix.getSightings: not valid Latitude')
     if not self.angleNewcheck(assumedLongitude):
         raise ValueError('Fix.getSightings: not valid Longitude')
     if self.sightingFile == '':
         raise ValueError('Fix.getSightings: no sighting file in instance')
     if self.ariesFile == '':
         raise ValueError('Fix.getSightings: no aries file in instance')
     if self.starFile == '':
         raise ValueError('Fix.getSightings: no aries file in instance')
     try:
         dom=xml.parse(self.sightingFile)
     except:
         raise ValueError('Fix.getSightings: parse xml file failed')
     try:
         starFile=open(self.starFile,'r')
     except:
         raise ValueError('Fix.getSightings: starfile can not be found in directory')
     try:
         ariesFile=open(self.ariesFile,'r')
     except:
         raise ValueError('Fix.getSightings: ariesfile can not be found in directory')
     sightings=dom.getElementsByTagName('sighting')
     
     for sight in sightings:
         OneSighting = Sighting()
         #getting information from xml file
         body = sight.getElementsByTagName('body')
         date = sight.getElementsByTagName('date')
         time = sight.getElementsByTagName('time')
         obv = sight.getElementsByTagName('observation')
         height = sight.getElementsByTagName('height')
         temt = sight.getElementsByTagName('temperature')
         pres = sight.getElementsByTagName('pressure')
         horz = sight.getElementsByTagName('horizon')
         
         #check mandatory tag format and pass data in to sighting instances
         if len(body)==0 or len(date)==0 or len(time)==0 or len(obv)==0:
             self.errorNumber+=1
             continue
         
         bodydata = self.getText(body[0].childNodes)
         if len(bodydata) == 0:
             self.errorNumber+=1
             continue
         OneSighting.setBody(bodydata)
         datedata = self.getText(date[0].childNodes)
         pattern=re.compile(r'(^\d\d\d\d-\d\d-\d\d$)')
         ifmatch = pattern.match(datedata)
         if not ifmatch:
             self.errorNumber+=1
             continue
         if not self.datecheck(datedata):
             self.errorNumber+=1
             continue
         OneSighting.setDate(datedata)
         timedata = self.getText(time[0].childNodes)
         pattern=re.compile(r'(^\d\d:\d\d:\d\d$)')
         ifmatch = pattern.match(timedata)
         if not ifmatch:
             self.errorNumber+=1
             continue
         if not self.timecheck(timedata):
             self.errorNumber+=1
             continue
         OneSighting.setTime(timedata)
         obvdata = self.getText(obv[0].childNodes)
         angle=Angle.Angle()
         anglecheck=Angle.Angle()
         if not self.anglecheck(obvdata):
             self.errorNumber+=1
             continue
         obvdata=angle.setDegreesAndMinutes(obvdata)
         checkdata=anglecheck.setDegreesAndMinutes('0d0.1')
         if obvdata < checkdata:
             self.errorNumber+=1
             continue
         obvdatarad=obvdata*math.pi/180
         if not (len(height) == 0 or self.getText(height[0].childNodes)==''):
             heightdata=self.getText(height[0].childNodes)
             try:
                 heightdata=float(heightdata)
             except:
                 self.errorNumber+=1
                 continue
             if heightdata < 0:
                 self.errorNumber+=1
                 continue
             OneSighting.setheight(heightdata)
         if not (len(temt) == 0 or self.getText(temt[0].childNodes)==''):    
             temtdata = self.getText(temt[0].childNodes)
             temtdata = int(temtdata)
             if temtdata < -20 or temtdata > 120:
                 self.errorNumber+=1
                 continue
             OneSighting.setTemt(temtdata)
         if not (len(pres) == 0 or self.getText(pres[0].childNodes)==''):  
             presdata = self.getText(pres[0].childNodes)
             try:
                 presdata = int(presdata)
             except:
                 self.errorNumber+=1
                 continue
             
             if presdata < 100 or presdata > 1100:
                 self.errorNumber+=1
                 continue
             OneSighting.setPres(presdata)
         if not (len(horz) == 0 or self.getText(horz[0].childNodes)==''):  
             horzdata = self.getText(horz[0].childNodes)
             if not (horzdata == 'Artificial' or  horzdata == 'artificial' or horzdata == 'Natural' or horzdata == 'natural'):
                 self.errorNumber+=1
                 continue
             OneSighting.setHorz(horzdata)
         #Calculation of adjusted altitude
         if OneSighting.horz == 'Artificial' or OneSighting.horz == 'artificial':
             dip = 0
         else:
             dip = (-0.97*math.sqrt(OneSighting.height))/60
         refc=((-0.00452*OneSighting.pres)/(273+(OneSighting.temt-32)*5/9))/math.tan(obvdatarad)
         adjAlt=obvdata+dip+ refc
         angle.setDegrees(adjAlt)
         adjAlt=angle.getString()
         OneSighting.setAdjAtl(adjAlt)
         self.sightingList.append(OneSighting)
     file=open(self.name,'a')
     self.sightingList.sort(key=attrgetter('date','time','body'))
     #Start calculating latitude and longitude
     self.getLatitudeAndSHA(starFile)
     self.getGHA(ariesFile)
     self.getLongitude()
     self.getLHA(assumedLongitude)
     self.getCorrectAltitude(assumedLatitude)
     self.getDistanceAdj()
     self.getAzimuthAdj(assumedLatitude)
     
     
     for sighting in self.sightingList:
         if sighting.valid==True:
             file.write(self.gettime()+ '\t' + sighting.body + '\t' + sighting.date + '\t' + sighting.time + '\t' + sighting.adjAtl + '\t' + sighting.latitude + '\t' +sighting.longitude + '\t'+ assumedLatitude + '\t'+ assumedLongitude + '\t' + sighting.azi + '\t' + sighting.disAl + '\n')
     approxLa=self.getAppLa(assumedLatitude)
     approxLo=self.getAppLo(assumedLongitude)
     
     if approxLa[0]=='-':
         approxLa='S'+approxLa[1:]
     else:
         approxLa='N'+approxLa
     
     file.write(self.gettime() + '\t' + 'Sighting errors:' + '\t' + str(self.errorNumber) + '\n')
     file.write(self.gettime() + '\t' + 'Approximate latitude:' + '\t' + approxLa+ '\t' + 'Approximate Longitude:' + '\t' + approxLo + '\n')
     file.close()
     approximateLatitude = approxLa
     approximateLongitude = approxLo
     return (approximateLatitude,approximateLongitude)
Beispiel #25
0
# -*-coding:Latin-1 -*

from _operator import attrgetter


class Students:
    """Class that Describe Students"""
    def __init__(self, name, age, avg):
        """Constructor For the student and initialize all arguments"""
        self.name = name
        self.age = age
        self.avg = avg

    def __repr__(self):
        """print information about students"""
        return "<Student {} (age={}, avg={}>".format(self.name, self.age,
                                                     self.avg)


students = [
    Students("Clément", 14, 16),
    Students("Charles", 12, 15),
    Students("Oriane", 14, 18),
    Students("Thomas", 11, 12),
    Students("Damien", 12, 15),
]

print(sorted(students, key=attrgetter("age", "avg", "name"), reverse=True))
from _operator import attrgetter


# 内置的 sorted() 函数有一个关键字参数 key ,可以传入一个 callable 对象给它,
# 这个 callable 对象对每个传入的对象返回一个值,这个值会被 sorted 用来排序这些对象。
# 比如,如果你在应用程序里面有一个 User 实例序列,并且你希望通过他们的 user_id 属性进行排序,
# 你可以提供一个以 User 实例作为输入并输出对应 user_id值的 callable 对象。比如:
class User:
    def __init__(self, user_id):
        self.user_id = user_id

    def __repr__(self):
        return 'User({})'.format(self.user_id)


users = [User(23), User(3), User(99)]
print(users)
print(sorted(users, key=lambda u: u.user_id))

# 另外一种方式是使用 operator.attrgetter() 来代替 lambda 函数:
print(sorted(users, key=attrgetter('user_id')))

# 选择使用 lambda 函数或者是 attrgetter() 可能取决于个人喜好。
# 但是,attrgetter() 函数通常会运行的快点,并且还能同时允许多个字段进行比较。
# 这个跟 operator.itemgetter() 函数作用于字典类型很类似(参考 1.13 小节)。
# 例如,如果 User 实例还有一个 first_name 和 last_name 属性,那么可以向下面这样排序:
# by_name = sorted(users, key=attrgetter('last_name', 'first_name'))

# 同样需要注意的是,这一小节用到的技术同样适用于像 min() 和 max() 之类的函数。比如:
print(min(users, key=attrgetter('user_id')))
print(max(users, key=attrgetter('user_id')))
Beispiel #27
0
 def __iter__(self):
     yield from map(attrgetter('element'), self._elements)
Beispiel #28
0
def event_management(request, id):
    context = {}
    rec_list = []
    rec_id = []

    events = Event.objects.get(pk=id)
    activity = Activity.objects.filter(event = events.id)
    logistic = Logistic.objects.filter(event = events.id)
    users = User.objects.all()
    rec = eventProfile(id)


#--------Matching Technique class Filtering--
    for x in rec:
        rec_list.append(filtering(int(x.__dict__['id']),float(x.__dict__['similarity'])))

    rec_list2 = sorted(rec_list, key=attrgetter('similarity'), reverse=True)
    for x in rec_list2:
        print("ID: " + str(x.id) +" Similarity :"+ str(x.similarity))
        rec_id.append(x.id)


#--------add activity---------
    activity_form = add_activity(request.POST)
    if 'add_activity' in request.POST:
        if activity_form.is_valid():
            instance = activity_form.save(commit=False)
            instance.event = events
            instance.save()
            messages.success(request, 'Activity successfully Create!')
            return redirect('detail', id=id)
        else:
            context = {'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form}
            return redirect('detail',id=id)

#--------add logistic---------------------
    logistic_form = add_logistic(request.POST)
    if 'add_logistic' in request.POST:
        if logistic_form.is_valid():
            instance = logistic_form.save(commit=False)
            instance.event = events
            instance.save()
            logistic_form.save_m2m()
            messages.success(request, 'Logistic successfully Added!')
            return redirect('detail', id=id)
        else:
            context = {'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form,'logistic_form':logistic_form}
            return redirect('detail',id=id)

#--------Join Event------------------
    if 'join-event' in request.POST:
        events = Event.objects.get(pk=id)
        Event.join(request.user,events)
        messages.success(request, 'You are successfully Added to the Volunteers List!')

        context = {'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form,'logistic_form':logistic_form}
        return redirect('detail',id=id)

#--------Unjoin Event----------------------
    if 'unjoin-event' in request.POST:
        events = Event.objects.get(pk=id)
        Event.unjoin(request.user,events)
        messages.success(request, 'You are successfully Remove from the Volunteers List!')

        context = {'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form,'logistic_form':logistic_form}
        return redirect('detail',id=id)

#--------Edit event---------------------
    event_edit = EditEvent(request.POST or None ,instance=events)
    if 'edit-event' in request.POST:
        if event_edit.is_valid():
            event_edit.save()
            messages.success(request, 'Event is successfully Updated!')
            return redirect('detail', id=id)
        else:
            context = {'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form,'event_edit':event_edit}
            return redirect('detail',id=id)

#--------Delete event------------
    if 'delete-event' in request.POST:
        events.delete()
        messages.success(request, 'Event is successfully Deleted!')
        return redirect('event_view')

    current_event = None
    if request.user.is_authenticated:
        current_event  = request.user.event_set.filter(pk=id)


    context = {'current_event':current_event,'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form,'logistic_form':logistic_form,'event_edit':event_edit}
    return render(request, "event/event_detail.html", context)