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.
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.
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å.
Det är onödigt med en tom if-sats, då är det bättre att kolla specifikt efter att saken inte stämmer.
Jag hade döpt om
_outer_key
till bara_
i for-loopen så det blir tydligare att den inte används.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.
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.
Och där har vi en sorterad dictionary på förekomst och bokstavsordning.