• 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ą.

Object Storage Arubacloud
0 głosów
175 wizyt
pytanie zadane 9 kwietnia 2021 w Python przez Anahan89 Obywatel (1,320 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 2021 przez reaktywny Nałogowiec (40,990 p.)
edycja 9 kwietnia 2021 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 2021 przez adrian17 Ekspert (344,860 p.)
(innymi słowy: nie powinieneś polegać na kolejności elementów w słowniku.)
komentarz 9 kwietnia 2021 przez reaktywny Nałogowiec (40,990 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 2021 przez Anahan89 Obywatel (1,320 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 2021 przez reaktywny Nałogowiec (40,990 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 2021 przez Anahan89 Obywatel (1,320 p.)
Moja wersja Pythona to 3.9.4 czyli teoretycznie nie powinien zmieniać jeśli dobrze zrozumiałem?
komentarz 9 kwietnia 2021 przez adrian17 Ekspert (344,860 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 2021 przez Anahan89 Obywatel (1,320 p.)
Wszystko jasne, dziękuję! W takim razie w książce jest chyba błąd :D

Podobne pytania

0 głosów
1 odpowiedź 103 wizyt
pytanie zadane 5 grudnia 2021 w JavaScript przez TOWaD Mądrala (5,700 p.)
+1 głos
2 odpowiedzi 331 wizyt
0 głosów
1 odpowiedź 507 wizyt
pytanie zadane 10 sierpnia 2015 w C i C++ przez Patrycjerz Mędrzec (192,320 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...