słowniki

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 )

1

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

1
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.

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."
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 :)

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