Home > Blockchain >  How do I aggregate 5 random samples of a dict?
How do I aggregate 5 random samples of a dict?

Time:12-19

I'm trying to sample 5 items from a dict then aggregate them by sum. In this case by building a sum of all 5 prices. How do I do that?

import random

mydict = {
    1: {"name":"item1","price": 16}, 
    2: {"name":"item2","price": 14},
    3: {"name":"item3","price": 16}, 
    4: {"name":"item4","price": 14}, 
    5: {"name":"item5","price": 13},
    6: {"name":"item6","price": 16},
    7: {"name":"item7","price": 11}, 
    8: {"name":"item8","price": 12}, 
    9: {"name":"item9","price": 14},
    10: {"name":"item10","price": 14},
}

randomlist = random.sample(mydict.items(), 5)
print(sum(randomlist)) # This line needs to work properly.

CodePudding user response:

You don't care about the keys 1, 2, 3, just use mydict.values()

Then take you have a list of 5 dict {name:,price:}, takes al the names, and all the prices for the sum

randomlist = random.sample(list(mydict.values()), 5)
print("Prices of", ",".join(item['name'] for item in randomlist))
print(sum(item['price'] for item in randomlist))

CodePudding user response:

Random dicts

To get random dicts you can do it this way.

randomlist = random.sample(list(mydict.items()), 5)
dict(randomlist)

Result:

{10: {'name': 'item10', 'price': 14},
 8: {'name': 'item8', 'price': 12},
 7: {'name': 'item7', 'price': 11},
 9: {'name': 'item9', 'price': 14},
 5: {'name': 'item5', 'price': 13}}

Get final sum fast

But if you only look for final sum of prices you can do it a bit faster.

randomlist = random.sample(list(mydict.values()), 5)
sum(x['price'] for x in randomlist)

Result:

69.0

V3 the compact one

sum(random.sample([x['price'] for x in mydict.values()], 5))
  • Related