简体   繁体   中英

Why is this dictionary comprehension for list of dictionaries not returning values?

I am iterating over a list of dictionaries in a list formatted as follows (each dictionary relates to one item of clothing, I have only listed the first:

new_products = [{'{"uniq_id": "1234", "sku": "abcdefgh", "name": "Levis skinny jeans", '
                 '"list_price": "75.00", "sale_price": "55.00", "category": "womens"}'}]
def find_product(dictionary, uniqid):
    if 'uniq_id' in dictionary:
        if ['uniq_id'] == uniqid:
            return(keys, values in dictionary)

print(find_product(new_products, '1234'))

This is returning

None

The reason for the if statement in there is that not every product has a value for uniq_id so I was getting a key error on an earlier version of my code.

Your dictionary definition is quite unclear.

Assuming that you have given a list of dictionaries of size 1, it should be something like this:

new_products = [{"uniq_id": "1234", "sku": "abcdefgh", "name": "Levis skinny jeans", "list_price": "75.00", "sale_price": "55.00", "category": "womens"}]

def find_product(list_of_dicts, uniqid):
    for dictionary in list_of_dicts:
        if 'uniq_id' in dictionary:
            if dictionary['uniq_id'] == uniqid:
                return dictionary

print(find_product(new_products, '1234'))

You are using something like this:

new_products = [{'{ "some" : "stuff" }'}]

This is a list (the outer [] ) containing a set (the {} )

{'{ "some" : "stuff" }'}

Note {1} is a set containing the number 1. Though it uses the curly braces it isn't a dictionary.

Your set contains a string:

'{ "some" : "stuff" }'

If I ask if 'some' is in this, I get True back, but if I ask for this string's keys there are no keys.

Make your new_products a list containing a dictionary (not a set), and don't put the payload in a string:

new_products = [{"uniq_id": "1234", 
                 "sku": "abcdefgh",
                 "name": "Levis skinny jeans",
                 "list_price": "75.00",
                 "sale_price": "55.00",
                 "category": "womens"}]

Then loop over the dictionaries in the list in your function:

def find_product(dictionary_list, uniqid):
    for d in dictionary_list:
        if 'uniq_id' in d:
            if d['uniq_id'] == uniqid:
                 return d.keys(), d.values()
    return "not found" # or something better



>>> find_product(new_products, '1234')
(dict_keys(['uniq_id', 'sku', 'name', 'list_price', 'sale_price', 'category']), dict_values(['1234', 'abcdefgh', 'Levis skinny jeans', '75.00', '55.00', 'womens']))
>>> find_product(new_products, '12345')
'not found'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM