słowniki

Odpowiedz Nowy wątek
2019-06-05 19:35
0

Witam,

Mam chyba proste pytanie ale nie mogę znaleźć odpowiedzi. Mam 2 słowniki. Chciałbym zmienić wartości w słowniku a na wynik mnożenia wartości w słowniku dane, które przypisane są do tego samego klucza przez 0.7 i wynik zapisać jako string z tym że chciałbym dodać jednostkę na końcu np. kg). Nie wiem jak dodać na końcu "kg" do każdego wyniku.


a = {'key1' : "10",  "key2": "10"}

dane = {'key1' : "6",  "key2": "4"}

for key in a:
    a[key] = str(float(dane[key]) * 0.7 )

Pozostało 580 znaków

2019-06-05 19:49
1

str(float(dane[key]) * 0.7 )+"kg"


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2019-06-05 19:54
a = {'key1' : "10",  "key2": "10"}

dane = {'key1' : "6",  "key2": "4"}

for key in a:
    a[key] = str(float(dane[key]) * 0.7 ) + "kg."

Operator + jest przeciążony, również konkatenuje stringi, beznadziejny to design, ale tak jest.


edytowany 1x, ostatnio: lion137, 2019-06-05 19:54
Dzięki. Dodawałem + "kg") jeszcze w nawiasie. Dlatego nie działałao. - Glt87 2019-06-05 19:58

Pozostało 580 znaków

2019-06-06 09:35
0

IMHO ładniejsze rozwiązanie to skorzystanie z f-string:

for key in a:
    value = float(dane[key]) * 0.7
    a[key] = f"{value}kg."

Wiedza to potęga

Pozostało 580 znaków

2019-06-06 11:14
1

Dodam tylko, że jeśli dane te będą dalej obrabiane, albo gdzieś prezentowane (nie jest to tylko ćwiczenie na studia), warto pomyśleć o jednym z dwóch:

  • Nie zamieniać na float, zamiast tego skorzystać z Decimala (lub Fractiona). Albo mnożyć przez Decimal lub Fraction...
  • Użyć zaokrąglenia round, bo przy mnożeniu przez (przykładowo 0.7, w innych wypadkach też się zdarza) zmiennoprzecinkową, potrafią wychodzić niedokładności na float w pythonie.
    >>> from fractions import Fraction
    >>> from decimal import Decimal
    >>> 6.0*0.7
    4.199999999999999
    >>> 6*0.7
    4.199999999999999
    >>> multiplier = Decimal('0.7')
    >>> float(6*multiplier)
    4.2
    >>> # W powyższym Decimala nie przemnożysz przez float. `6.0 * multiplier` będzie miało TypeError.
    >>> multiplier = Fraction(7, 10)
    >>> float(6*multiplier)
    4.2
    >>> float(6.0*multiplier)
    4.199999999999999
    >>> # A tu jak widać, niepotrzebna konwersja na float tworzy ten sam 'błąd'. 

Najlepszą opcją będzie traktować wszystko jako Fraction lub Decimal, ewentualnie zaokrąglić, jeśli potrzebujesz ładnych wyników w kg :)


Linux Mint
Arduino / Python 3.5.2
edytowany 1x, ostatnio: Guaz, 2019-06-06 11:14

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0