12 svar
237 visningar
Bellasofie är nöjd med hjälpen
Bellasofie 57 – Fd. Medlem
Postad: 26 mar 2020 17:06

Ersätta värden och nycklar i dictionary

Hej! Har kört fast rejält i en tuff uppgift, men första steget jag behöver hjälp med hur jag ska lösa är att jag har två dictionaries som ser ut enligt följande:

{'Matine: Kyssen på kryssen': [16.07, 16.22, 16.37, 16.52, 17.07, 17.22, 17.37], 'Börsen idag': [], 'Uutiset-Nyheter': [], 'Kommer i Ettan': [], 'Aktuellt och väder': [18.07], 'Sommarhallå': [18.37, 18.22], 'Dinosaurier': [18.52], 'Blossom': [19.22, 19.07], 'Gardell får hemligt besök': [19.52, 19.37], 'Mitt i livet': [20.37, 20.07, 20.22], 'Ett ögonblicks verk': [20.52], 'Aktuellt': [21.22, 21.07], 'Sportnytt': [21.37], 'UR: Sommarkvällar med Tidernas Europa': [21.52, 22.07, 22.22], 'Morsarvet': [23.22, 22.37, 23.07, 22.52]}

och den andra:

{'21.07/1': 57, '21.22/1': 48, '21.37/1': 47, '21.52/1': 3, '22.07/1': 3, '22.22/1': 3, '22.37/1': 3, '22.52/1': 3, '23.07/1': 3, '23.22/1': 3, '19.07/1': 2, '16.07/1': 1, '16.22/1': 1, '16.37/1': 1, '16.52/1': 1, '17.07/1': 1, '17.22/1': 1, '17.37/1': 1, '18.07/1': 1, '18.22/1': 1, '18.37/1': 1, '18.52/1': 1, '19.22/1': 1, '19.37/1': 1, '19.52/1': 1, '20.07/1': 1, '20.22/1': 1, '20.37/1': 1, '20.52/1': 1}

det jag vill göra är att "slå ihop dem" så att exempelvis {'Aktuellt': [21.22, 21.07]} tillsammans med {'21.07/1': 57, '21.22/1':48} genererar en ny dictionary som ser ut så här: {'Aktuellt': [48, 57]}

Lindehaven 820 – Lärare
Postad: 26 mar 2020 20:02

Hackade ihop en lösning men presenterar endast början på den samt pseudo-kod i form av kommentarer. Det krävs en del insikt i olika datatyper, speciellt då dictionaries, för att lösa uppgiften.

Man kan ställa sig frågan om alla värden ska sparas i den nya dictonarien, exvis 'Mitt i livet': [1, 1, 1] eller om endast unika värden ska sparas, exvis 'Mitt i livet': [1]? Tillåts tomma listor, exvis 'Kommer i Ettan': []?

# tilldela första dictionary till 'd1'
# tilldela andra dictionary till 'd2'
# skapa tom dictionary 'd3'
d3 = {}
# löp igenom alla nycklar 'program' i dictionary 'd1'
for program in d1:
    # skapa tom lista 'd3_tider'
    d3_tider = []
    # löp igenom alla nycklar 'tider' i dictionary 'd2'
        # plocka ut 'tid' ur 'tider' (det som ligger före '/' i strängen)
        # om flyttalet 'tid' finns i dictionary 'd1'
            # addera 'tider' från dictionary 'd2' till listan 'd3_tider'
    # lägg in värdet 'd3_tider' till dictionary 'd3' med nyckeln 'program'

Laguna 28468
Postad: 26 mar 2020 22:45

Det är olämpligt att representera tal som ska ha precis två decimaler som flyttal, men uppgiften kanske är sådan. Man kan t. ex få problem när man ska jämföra om två är lika. 

Lindehaven 820 – Lärare
Postad: 27 mar 2020 07:50
Laguna skrev:

Det är olämpligt att representera tal som ska ha precis två decimaler som flyttal, men uppgiften kanske är sådan. Man kan t. ex få problem när man ska jämföra om två är lika. 

Ja, det kan bli ett problem att använda flyttal, man kan då istället representera talen som strängar.

Skaft 2373 – F.d. Moderator
Postad: 27 mar 2020 08:44

Flyttal blir bara osäkert i beräkningar. Här ser de ut att vara klockslag, och skulle nog ge problem om man t.ex. försöker räkna ut när ett program slutar. Men gör man inga beräkningar ska det inte bli några konstigheter. Dvs, 0.1 + 0.2 blir inte 0.3, men 0.3 är alltid 0.3 och går därför bra att t.ex. ha som key i dictionaries.

Med det sagt är det väl bra att skapa säkra vanor, och undvika flyttal när det går.

Laguna 28468
Postad: 27 mar 2020 12:10
Skaft skrev:

Flyttal blir bara osäkert i beräkningar. Här ser de ut att vara klockslag, och skulle nog ge problem om man t.ex. försöker räkna ut när ett program slutar. Men gör man inga beräkningar ska det inte bli några konstigheter. Dvs, 0.1 + 0.2 blir inte 0.3, men 0.3 är alltid 0.3 och går därför bra att t.ex. ha som key i dictionaries.

Med det sagt är det väl bra att skapa säkra vanor, och undvika flyttal när det går.

Det är möjligt att Python garanterar mer än t. ex. C gör, men i C kan det mycket väl hända att det blir "fel" vid rena jämförelser. 

Skaft 2373 – F.d. Moderator
Postad: 27 mar 2020 13:23

Aha! Ja C vet jag väldigt lite om, min kommentar gällde Pythonkontexten =)

Lindehaven 820 – Lärare
Postad: 31 mar 2020 14:52
Lindehaven skrev:

Hackade ihop en lösning men presenterar endast början på den samt pseudo-kod i form av kommentarer. Det krävs en del insikt i olika datatyper, speciellt då dictionaries, för att lösa uppgiften.

Man kan ställa sig frågan om alla värden ska sparas i den nya dictonarien, exvis 'Mitt i livet': [1, 1, 1] eller om endast unika värden ska sparas, exvis 'Mitt i livet': [1]? Tillåts tomma listor, exvis 'Kommer i Ettan': []?

Bellasofie, var mitt förslag till någon hjälp eller provar du något annat?

Bellasofie 57 – Fd. Medlem
Postad: 16 maj 2020 22:49
Lindehaven skrev:
Lindehaven skrev:

Hackade ihop en lösning men presenterar endast början på den samt pseudo-kod i form av kommentarer. Det krävs en del insikt i olika datatyper, speciellt då dictionaries, för att lösa uppgiften.

Man kan ställa sig frågan om alla värden ska sparas i den nya dictonarien, exvis 'Mitt i livet': [1, 1, 1] eller om endast unika värden ska sparas, exvis 'Mitt i livet': [1]? Tillåts tomma listor, exvis 'Kommer i Ettan': []?

Bellasofie, var mitt förslag till någon hjälp eller provar du något annat?

Hej! Det var tvunget att lösas genom en hel del for-loopar och olika listor! Men det löste sig till slut:) Tack snälla för hjälpen!!

Micimacko 4070
Postad: 19 aug 2020 07:51
Laguna skrev:

Det är olämpligt att representera tal som ska ha precis två decimaler som flyttal, men uppgiften kanske är sådan. Man kan t. ex få problem när man ska jämföra om två är lika. 

Hur borde man göra istället?

Lindehaven 820 – Lärare
Postad: 19 aug 2020 08:32
Micimacko skrev:
Laguna skrev:

Det är olämpligt att representera tal som ska ha precis två decimaler som flyttal, men uppgiften kanske är sådan. Man kan t. ex få problem när man ska jämföra om två är lika. 

Hur borde man göra istället?

Använd t ex strängar.

Micimacko 4070
Postad: 19 aug 2020 12:07

Men de går väl inte att räkna med?

Laguna 28468
Postad: 19 aug 2020 12:45
Micimacko skrev:

Men de går väl inte att räkna med?

Inte utan vidare, men här representerar man tider, och behöver inte räkna. Och behöver man räkna med tider blir det fel i alla fall med flyttal, eftersom det går 60 minuter på en timme och inte 100. I så fall kanske man ska räkna minuter från midnatt i stället, som heltal. 

Svara Avbryt
Close