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]}
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'
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.
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.
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.
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.
Aha! Ja C vet jag väldigt lite om, min kommentar gällde Pythonkontexten =)
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?
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!!
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?
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?
Men de går väl inte att räkna med?
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.