Python Forum
How can I print the number of unique elements in a list? - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Homework (https://python-forum.io/forum-9.html)
+--- Thread: How can I print the number of unique elements in a list? (/thread-25112.html)



How can I print the number of unique elements in a list? - AnOddGirl - Mar-19-2020

Using the dictionary below, I'm supposed to create a function that returns the number of unique items in the "items" list.

shopping_cart = {
    "tax": .08,
    "items": [
        {
            "title": "orange juice",
            "price": 3.99,
            "quantity": 1
        },
        {
            "title": "rice",
            "price": 1.99,
            "quantity": 3
        },
        {
            "title": "beans",
            "price": 0.99,
            "quantity": 3
        },
        {
            "title": "chili sauce",
            "price": 2.99,
            "quantity": 1
        },
        {
            "title": "chocolate",
            "price": 0.75,
            "quantity": 9
        }
    ]
}
I've created the code below which outputs the number of items (5), but I need the code to only count unique items. For example, if two items in this list were identical, it should return 4 (since only 4 items would be unique in that case). How can I accomplish this?

def get_tax_rate(d):
    print (d['tax'])
Output:
5



RE: How can I print the number of unique elements in a list? - ndc85430 - Mar-20-2020

That function doesn't do what you claim it does - it only prints the value associated with the key "tax" in the dict.

In any case, how have you thought about solving the problem and what have you tried? We aren't going to do the work for you.


RE: How can I print the number of unique elements in a list? - buran - Mar-20-2020

(Mar-20-2020, 04:39 AM)ndc85430 Wrote: That function doesn't do what you claim it does - it only prints the value associated with the key "tax" in the dict.
and it's not 5 as you show in output, but 0.08


RE: How can I print the number of unique elements in a list? - Fre3k - Mar-20-2020

(Mar-19-2020, 10:53 PM)AnOddGirl Wrote:

Good morning,

Well as all above already mentioned, is your output not that what it should be / expect from your code :)
with
print(d['tax']
You only get the the value from the value "tax" in your dict.

Here is a short example how you can access/work through a nested-dict !
config = {
    "username": "user",
    "password": "password",
    "server": "https://website.de",
    "headers": {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0",
        "Connection": "keep-alive"
    }
}

print(config['headers']['User-Agent'])
Will output:
Output:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0
You can count all items(key/value pairs) from a dict with the len() function
Here (How to find length of dictionary values) you have a pretty decent example, which is actually part of that what you need.



Now you only need to call your created function the right way ( with the correct parameter " d " )


All the best :)
Tried to explain it as easy as I could in the morning without giving you the direct solution ...

That are at least the basics. The rest with the unique part is up to you :)
Shouldnt be that hard.


RE: How can I print the number of unique elements in a list? - DeaD_EyE - Mar-20-2020

You get the items, then you put the titles into a set or a set-comprehension, then get the len of the elements.

A set holds only unique elements without keeping the order.
A set does not allow mutable objects like dicts, so you have to use a unique feature from your item-dict.

Read what a set is and what it does.
len({item["title"] for item in shopping_cart["items"]})
If the value of title is not unique, you've a big problem.
The price or quantity is not a unique feature.


RE: How can I print the number of unique elements in a list? - AnOddGirl - Mar-24-2020

I'm sorry for the mixup. Below is the code I've written that should have been in my OP (the incorrect code is from another problem).

def number_of_item_types(d):
    return (len(d['items']))
Thank you for all of your help. I understand now.