FAQ: Collections - UserDict

This community-built FAQ covers the “UserDict” exercise from the lesson “Collections”.

Paths and Courses
This exercise can be found in the following Codecademy content:

Learn Intermediate Python 3

FAQs on the exercise UserDict

There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply (reply) below.

If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!
You can also find further discussion and get answers to your questions over in Language Help.

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head to Language Help and Tips and Resources. If you are wanting feedback or inspiration for a project, check out Projects.

Looking for motivation to keep learning? Join our wider discussions in Community

Learn more about how to use this guide.

Found a bug? Report it online, or post in Bug Reporting

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

What are the benefits of using UserDict as a parent class of a custom data structure compared to using dict as a parent class of a custom data structure? What are the benefits of using dict as a parent class of a custom data structure compared to using Userdict as a parent class of a custom data structure?

I’m a little confused by the solution - where is refers to self.data,items() - where does the actual data part come from?
is that because data is fed into the class initiation and if so doesn’t it make this particular class quite fragile as not all dictionaries would be called data so not sure it’s coded very robustly (if I’ve understood the intent correctly).

I think I get it now, there is a data property in the parent UserDict class I didn’t have visibility of, I have to lookup the details on Python.org to better understand that on.

I had overlooked the item in the description that explained this:
" This class contains all of the functionality of a normal dict , except that we can access the dictionary data through the data property."

3 Likes

Dear all,

Why do I get a “type error: string indices must be integers” when using the code block below?
My reasoning is that we first iterate through each Order and then access each Orders dictionary with the key “order_status”…

data = {'order_4829': {'type': 't-shirt', 'size': 'large', 'price': 9.99, 'order_status': 'processing'}, 'order_6184': {'type': 'pants', 'size': 'medium', 'price': 14.99, 'order_status': 'complete'}, 'order_2905': {'type': 'shoes', 'size': 12, 'price': 22.50, 'order_status': 'complete'}, 'order_7378': {'type': 'jacket', 'size': 'large', 'price': 24.99, 'order_status': 'processing'}} # Write your code below! from collections import UserDict class OrderProcessingDict(UserDict): def clean_orders(self): del_items = [] for order in self.data: if order["order_status"] == "complete": del_items.append(order) for order in del_items: del self.data[order] process_dict = OrderProcessingDict(data) process_dict.clean_orders()

I see a problem in the loop
order is a string (each key)
so to access the value at that dictionary, you would use self.data[order]

So
if order["order_status"] == "complete":
should be
if self.data[order]["order_status"] == "complete":

I wonder why the output is None instead of dictionary with two remained data. I tried both self and self.data. They are the same.

data = {'order_4829': {'type': 't-shirt', 'size': 'large', 'price': 9.99, 'order_status': 'processing'}, 'order_6184': {'type': 'pants', 'size': 'medium', 'price': 14.99, 'order_status': 'complete'}, 'order_2905': {'type': 'shoes', 'size': 12, 'price': 22.50, 'order_status': 'complete'}, 'order_7378': {'type': 'jacket', 'size': 'large', 'price': 24.99, 'order_status': 'processing'}} # Write your code below! from collections import UserDict class OrderProcessingDict(UserDict): def clean_orders(self): del_keys = [] for key, val in self.items(): if val['order_status'] == 'complete': del_keys.append(key) for key in del_keys: del self[key] process_dict = OrderProcessingDict(data) print(process_dict.clean_orders())

I am having issues with the whole collections module, since I feel it is didactically poorly designed.
It’s more or less just memorizing collections one after another. The examples are superficial and I still don’t see the real world application in many of them. I already dont remember the first collections I’ve learned a few weeks ago, despite that doing the respective excersise takes effort and time.