• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcje, dodawanie dowolnej ilości argumentów w postaci słów kluczowych- problem z kolejnością.

0 głosów
66 wizyt
pytanie zadane 9 kwietnia w Python przez Anahan89 Obywatel (1,240 p.)

Hej,

zastanawia mnie dlaczego poniższa funkcja zwraca mi słownik nie w tej kolejności- zależy mi najpierw na nazwie zespołu, nazwie płyty, a następnie kolejne dodawane argumenty. Oto mój kod

def albumy(band,name,**albums):
    albums['band']=band
    albums['name']=name
    return albums
d=albumy("ABC","XYZ",piosenka1='12', piosenka2='13')
print(d)

Wynikiem jest:

{'piosenka1': '12', 'piosenka2': '13', 'band': 'ABC', 'name': 'XYZ'}

A oczekiwałbym raczej:

{'band': 'ABC', 'name': 'XYZ','piosenka1': '12', 'piosenka2': '13'}

Pozdrawiam!

1 odpowiedź

+1 głos
odpowiedź 9 kwietnia przez reaktywny Nałogowiec (25,480 p.)
edycja 9 kwietnia przez reaktywny

Poczytaj o słownikach, to są pary klucz-wartość. Taki zapis:

albums['band']=band

albums['name']=name

tworzy dwie pary wartości k-v, niezależne.

Proponuję taki zapis:

def albumy(band, name):
     return {'band': band, 'name': name}
     

print(albumy("aaa", "bbb"))

EW.:

def albumy(band, name, piosenki):
     d = {'band': band, 'name': name}
     d.update(piosenki)
     return d

print(albumy("aaa",  "bbb", {"Piosenka 1" : "Tytuł piosenki 1", "Piosenka 2" : "Tytuł 2"}))

 

 

 

 

komentarz 9 kwietnia przez adrian17 Ekspert (300,440 p.)
(innymi słowy: nie powinieneś polegać na kolejności elementów w słowniku.)
komentarz 9 kwietnia przez reaktywny Nałogowiec (25,480 p.)
Można użyć OrderedDict w starszych wersjach pythona i od którejś wersji pythona kolejność jest zachowana w słownikach.
komentarz 9 kwietnia przez Anahan89 Obywatel (1,240 p.)

@reaktywny, jak słowniki działają to mniej więcej wiem. Przykład pochodzi z książki "Ptyhon, instrukcje dla programisty" Erica Matthes Wyd.II. Mój kod to jedynie przerobiony przykład z książki. U autora wynik jest właśnie w kolejności, a u mnie na odwrót. Rozdział dotyczy stricte budowania funkcji, a to zadanie ma na celu użycie dowolnej liczby argumentów w postaci słów kluczowych. Czyli mam dwa pewniaki jako argumenty a kolejne mogę dodawać w zależności od mojego widzimisię, może nie być w ogóle, mogą być 3 a może ich być 15. Ale chodzi mi o to aby wyświetlony słownik pokazywał się w kolejności argument 1,argument 2 bo jakoś ładniej to wygląda gdybym na przykład podał jako arg1 imie, arg2 nazwisko, a kolejny argumenty to jakieś bzdety przypisane do kolejnej osoby np. miasto:Wrocław itp.

Nie wiem czy to dobrze wyjaśniłem :)

komentarz 9 kwietnia przez reaktywny Nałogowiec (25,480 p.)
OK, wygląda na to, ze ja nie zrozumiałem w czym problem - za szybko przeczytałem treść postu :)

Jest coś takiego jak OrderedDict i tu jest zachowana kolejność dodawania do słownika i od Pythona 3.7 "zwykłe" słowniki również pamiętają kolejność elementów.

W starych wersjach z tego co pamiętam słowniki potrafią zmienić kolejność przy zmianie wartości, updatecie, etc.
komentarz 9 kwietnia przez Anahan89 Obywatel (1,240 p.)
Moja wersja Pythona to 3.9.4 czyli teoretycznie nie powinien zmieniać jeśli dobrze zrozumiałem?
komentarz 9 kwietnia przez adrian17 Ekspert (300,440 p.)

I nie zmienia.

Wynikiem jest:

{'piosenka1': '12', 'piosenka2': '13', 'band': 'ABC', 'name': 'XYZ'}

To jest poprawna zawartość.

Podtrzymuję że jeśli chcesz do czegoś takiego polegać na kolejności zawartości, nie powinieneś do tego używać słownika. Słownik/OrderedDict po prostu trzymają elementy w kolejności dodania, nie ma żadnej dokładnej kontroli nad kolejnością.

komentarz 9 kwietnia przez Anahan89 Obywatel (1,240 p.)
Wszystko jasne, dziękuję! W takim razie w książce jest chyba błąd :D

Podobne pytania

+1 głos
2 odpowiedzi 241 wizyt
0 głosów
1 odpowiedź 295 wizyt
pytanie zadane 10 sierpnia 2015 w C i C++ przez Patrycjerz Mędrzec (192,040 p.)
0 głosów
1 odpowiedź 70 wizyt
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

85,145 zapytań

133,947 odpowiedzi

296,959 komentarzy

56,260 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...