Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

återkoppling på students sortering i kmom06 analyzer #56

Open
AndreasArne opened this issue Oct 20, 2021 · 0 comments
Open

återkoppling på students sortering i kmom06 analyzer #56

AndreasArne opened this issue Oct 20, 2021 · 0 comments
Labels
återkoppling Återkoppling på studenters kod

Comments

@AndreasArne
Copy link
Member

Här kommer återkoppling på funktionen en student har skapat för att sortera datan i dictionarien korrekt.

Här är koden och nedanför finns återkopplingen.

def lexicographical_sort(dict_to_sort):
    """
    sorts a dictionary lexicographycally
    """
    unique_values_list = []
    # create a list of unique values
    for value in dict_to_sort.values():
        if value in unique_values_list:
            pass
        else:
            unique_values_list.append(value)
    # sort values
    unique_values_list.sort(reverse=True)

    sorted_dictionary = {}
    # create a list for multiple values, add to new dictionary
    for _outer_key, outer_value in enumerate(unique_values_list):
        multiple_values_for_key = []
        for inner_key, inner_value in dict_to_sort.items():
            if outer_value == inner_value:
                multiple_values_for_key.append(inner_key)
        multiple_values_for_key.sort(reverse=True)
        sorted_dictionary[outer_value] = tuple(multiple_values_for_key)
    
    return sorted_dictionary

Du har gjort en väldigt avancerad sorteringslösning. Det tog lite tid för mig att komma på exakt vad du gjorde i den.

Jag har inte så mycket att säga om hur koden är skriven, jag hittade bara ett par små saker.

Följande if-sats hade jag ändrat på.

if value in unique_values_list:
    pass
else:
    unique_values_list.append(value)

Det är onödigt med en tom if-sats, då är det bättre att kolla specifikt efter att saken inte stämmer.

if value not in unique_values_list:
    unique_values_list.append(value)

Jag hade döpt om _outer_key till bara _ i for-loopen så det blir tydligare att den inte används.

    for _, outer_value in enumerate(unique_values_list):

Däremot hade jag gjort sorteringen på ett annat sätt. Det finns ett lättare sätt att få till sortering på flera värden och det är med hjälp av tupler.

Precis som när man sorterar en sträng, när man sorterar tupler så jämförs ett elemnt åt gången. Om första elementet är olika jämförs inget mer. Om de är lika går det vidare och jämför nästa element.
Med den kunskapen kan vi bygga en lista som innehåller tupler. Tuplerna innehåller värdena i den ordningen som vi vill att det ska sorteras på. T.ex. (value, word).

Så om vi har en dictionary där nycklarna är orden och värdet är antalet förekomster av ordet i texten, då vill vi göra om den till en lista med tupler istället. Där första elementet är värdet och andra värdet nyckeln.

list_with_tuples = []
for word, nr in dict_to_sort.items():
    list_with_tuples.append((nr, word))

När vi sen sorterar listan så kommer den i första hand sortera på antalet förekomster i texten och om de är lika sorteras det på ordet istället.

list_with_tuples.sort(reverse=True)
sorted_dict = {}
for nr, word in list_with_tuples:
    sorted_dict[word] = nr

Och där har vi en sorterad dictionary på förekomst och bokstavsordning.

@AndreasArne AndreasArne added the återkoppling Återkoppling på studenters kod label Oct 20, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
återkoppling Återkoppling på studenters kod
Projects
None yet
Development

No branches or pull requests

1 participant