Python Forum
list in dicitonary element problem
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
list in dicitonary element problem
#1
ok so basically im trying to build a workout tracker app. my problem is i want to check if there is already the date inside the json fille so it won't overwrite it and if it is there then i want to append to the list in the element of the dictionary. so for example if there is already workout data for saturday the 14th of october i will append to the list of the activities (in this case there was already cycling ) and i want to append to that list to add aerobics for example. here is my relevant code


        if messagebox.askokcancel(title=f"{entry['day']} Workout Information",message=f"Activity: {entry['activity']} for {entry['unit']} minutes.\nSave this activity?"):
            if entry["day"] in saved_data:
                saved_data[entry["day"]['activity']].append(entry['activity'])
                saved_data[entry["day"]['unit']].append(entry['unit'])
            else:

                new_data={entry['day']:{"activity":[entry['activity']],"unit":[entry['unit']]}}
                saved_data.update(new_data)
        else:
            if messagebox.askokcancel(title=f"{entry['day']} Workout Information",message=f"Activity: {entry['activity']} for {entry['unit']} minutes.\nSave this activity?"):
                new_data={entry['day']:{"activity":entry['activity'],"unit":entry['unit']}}
                saved_data.update(new_data)
saved data represents the json file contents. as i have a button to generate columns of entries and labels i had to create a list of the activities that contain the day,activity and duration of the workout. the error that i get is a 'TypeError: string indices must be integers, not 'str on line 3 after the second if statement


ONE LAST NOTE: i am iterating through the list of dictionaries that contain the entry information which is why entry is present in my code. it is the assigned name for each of the dictionaries inside the list
Reply
#2
What is the structure for the json file?
You are aware that if you are using json, that the file will have to be loaded and then rewritten to after adding the extra data?
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#3
(Oct-14-2023, 12:30 PM)menator01 Wrote: What is the structure for the json file?

basically the date of the day in question is going to be the main key. inside that key are two keys. One of 'activity' and a key for 'duration' of workout. both these aforementioned keys have lists as values so i can have multiple activities registered for the same day
Reply
#4
Post entire error message, including the error trace. Post all relevant code, preferably a runnable example.

Without any error information I don't know if the problem is that "entry" is a list, but my guess is the error is here:
saved_data[entry["day"]['activity']].append(entry['activity'])
What is entry["day"]? Is it a date string? You are treating it as a dictionary, trying to get "activity". It should probably be this:
saved_data[entry["day"]]['activity'].append(entry['activity'])
That is not the only problem. Do you want an "activity" associated with a "unit". Your code just makes a bunch "activity" dictionaries and a bunch of "unit" dictionaries. There is no connection between them. I think you want to do this:
if messagebox.askokcancel(blah blah blah):
    saved_data.get[entry["day"], []).append({"activity": entry["activity], "unit": entry["unit"])
This uses dictionary.get(key, default) to return a new list when entry["day"] is not in saved_data.

To save in a json file, entry["activity"] and entry["unit"] must be serializable. If they are mutable (dictionaries or lists) you need to put a copy of the object in saved_data, possibly a deep copy.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  element in list detection problem jacksfrustration 5 397 Apr-11-2024, 05:44 PM
Last Post: deanhystad
  Find (each) element from a list in a file tester_V 3 1,238 Nov-15-2022, 08:40 PM
Last Post: tester_V
  Сheck if an element from a list is in another list that contains a namedtuple elnk 8 1,855 Oct-26-2022, 04:03 PM
Last Post: deanhystad
  Membership test for an element in a list that is a dict value for a particular key? Mark17 2 1,228 Jul-01-2022, 10:52 PM
Last Post: Pedroski55
  How to solve this simple problem? Check if cvs first element is the same in each row? thesquid 2 1,242 Jun-14-2022, 08:35 PM
Last Post: thesquid
  How to find the second lowest element in the list? Anonymous 3 2,029 May-31-2022, 01:58 PM
Last Post: Larz60+
  check if element is in a list in a dictionary value ambrozote 4 1,991 May-11-2022, 06:05 PM
Last Post: deanhystad
  Problem with "Number List" problem on HackerRank Pnerd 5 2,126 Apr-12-2022, 12:25 AM
Last Post: Pnerd
  sorting a list of lists by an element leapcfm 3 1,891 Sep-10-2021, 03:33 PM
Last Post: leapcfm
  Convert each element of a list to a string for processing tester_V 6 5,361 Jun-16-2021, 02:11 AM
Last Post: tester_V

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020