получить значение ключа, связанного с другими значениями ключа в словарях Python - PullRequest
0 голосов
/ 04 мая 2020

У меня есть два списка словарей и список json, и мне нужно получить значение указанного ключа c на основе значения ключа из другого словаря. Мои данные выглядят так:

opps = [{'Product2Id': '100','Price': '1645'}, {'Product2Id': '101','Price': '5478'}]
products = [{'Id': '100', 'Name': 'Insertion'}, [{'Id': '101', 'Name': 'Print'}]
sales_json = {'Insertion': {'name': 'BAZ', 'id': '95'}, 'Print': {'name': 'BIC', 'id': '105'}

Мне нужно l oop через opps и присвоить значение новой переменной из sales_json. Но для указанного c Id, который хранится в products и opps

, я попытался сделать следующее:

for index, my_dict in enumerate(opps):
    new_name = sales_json[products[my_dict["Product2Id"]]["Name"]]["name"]

Выдает ошибку. Желаемый вывод:

print(new_name)
BAZ,
BIC

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Вы пытаетесь использовать список продуктов в качестве словаря. Вместо этого вы должны сначала создать из него словарь с именем продукта:

prod_num_to_name = {d['Id']: d['Name'] for d in products}

Затем вы можете запустить желаемый l oop, измененный так:

for index, my_dict in enumerate(opps):
    new_name = sales_json[prod_num_to_name[my_dict["Product2Id"]]]["name"]
    print new_name
0 голосов
/ 04 мая 2020

Чтобы вернуть list имен, которые соответствуют критериям, с использованием списка понимания:

names = [ sales_json[product['Name']]['name'] for opp in opps for product in products if product['Id'] == opp['Product2Id']]
print (names)

Печатает список имен:

['BAZ', 'BIC']
...