Python Forum

Full Version: How can I print the number of unique elements in a list?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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
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.
(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
(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.
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.
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.