I would like to compare multiple nested dictionaries inside a larger dictionary. Suppose we have the following dictionary:
pricesDict = { "supermarket_1": {"apples": 1, "bananas": 2, "melons": 3},
"supermarket_2": {"apples": 1.5, "bananas": 2, "melons": 3},
"supermarket_3": {"apples": 1, "bananas": 2, "melons": 3},
"supermarket_4": {"apples": 1, "bananas": 2.7, "melons": 3}}
I have a pricesDict
that contains the prices of some products (more than 3 as shown above) in different supermarkets (more than 4 as shown above).
I want to go through it to compare the nested supermarkets with one another (e.g supermarket_1
with supermarket_2
, supermarket_3
and supermarket_4
, supermarket_2
with supermarket_3
and supermarket_4
and so on) to find out which one has the lowest prices.
If the programme spots a difference between the price of a specific product in two supermarkets it should print a message to inform us that there is a difference on the prices.
The output should be something like the following:
There is a price difference between supermarket_1: 1 and supermarket_2: 1.5 in apples
There is a price difference between supermarket_1: 2 and supermarket_4: 2.7 in bananas
There is a price difference between supermarket_2: 1.5 and supermarket_3: 1 in apples
There is a price difference between supermarket_2: 1.5 and supermarket_4: 1 in apples
There is a price difference between supermarket_2: 2 and supermarket_4: 2.7 in bananas
There is a price difference between supermarket_3: 2 and supermarket_4: 2.7 in bananas
Thanks!
CodePudding user response:
You can do it with itertools.combinations
and a nested loop:
from itertools import combinations
for first_market, second_market in combinations(pricesDict, 2):
for produce in ["apples", "bananas", "melons"]:
first_price = pricesDict[first_market][produce]
second_price = pricesDict[second_market][produce]
if first_price != second_price:
print(
f"There is a price difference between {first_market}: {first_price} "
f"and {second_market}: {second_price} in {produce}"
)
this prints:
There is a price difference between supermarket_1: 1 and supermarket_2: 1.5 in apples
There is a price difference between supermarket_1: 2 and supermarket_4: 2.7 in bananas
There is a price difference between supermarket_2: 1.5 and supermarket_3: 1 in apples
There is a price difference between supermarket_2: 1.5 and supermarket_4: 1 in apples
There is a price difference between supermarket_2: 2 and supermarket_4: 2.7 in bananas
There is a price difference between supermarket_3: 2 and supermarket_4: 2.7 in bananas
CodePudding user response:
Adding to hhmiko's answer, we can create the list of all the products within the code like this assuming every nested supermarket dictionary contains the same keys as all other nested supermarket dictionaries.
supermarkets = list(pricesDict.keys())
items = []
for i in pricesDict[supermarkets[0]]:
items.append(i)
and substitute the items list in line 4 of her answer