# A weighted version of random.choice

| | | | | | | | | | | | |

👻 Check our latest review to choose the best laptop for Machine Learning engineers and Deep learning tasks!

I needed to write a weighted version of random.choice (each element in the list has a different probability for being selected). This is what I came up with:

``````def weightedChoice(choices):
"""Like random.choice, but each element can have a different chance of
being selected.

choices can be any iterable containing iterables with two items each.
Technically, they can have more than two items, the rest will just be
ignored.  The first item is the thing being chosen, the second item is
its weight.  The weights can be any numeric values, what matters is the
relative differences between them.
"""
space = {}
current = 0
for choice, weight in choices:
if weight > 0:
space[current] = choice
current += weight
rand = random.uniform(0, current)
for key in sorted(space.keys() + [current]):
if rand < key:
return choice
choice = space[key]
return None
``````

This function seems overly complex to me, and ugly. I"m hoping everyone here can offer some suggestions on improving it or alternate ways of doing this. Efficiency isn"t as important to me as code cleanliness and readability.

👻 Read also: what is the best laptop for engineering students?

We hope this article has helped you to resolve the problem. Apart from A weighted version of random.choice, check other code Python module-related topics.

Want to excel in Python? See our review of the best Python online courses 2023. If you are interested in Data Science, check also how to learn programming in R.

By the way, this material is also available in other languages:

Marie Sikorski

Warsaw | 2023-01-31

Thanks for explaining! I was stuck with A weighted version of random.choice for some hours, finally got it done 🤗. Checked yesterday, it works!

Schneider Lehnman

Milan | 2023-01-31

I was preparing for my coding interview, thanks for clarifying this - A weighted version of random.choice in Python is not the simplest one. I just hope that will not emerge anymore

Chen Galleotti

Tallinn | 2023-01-31

Maybe there are another answers? What A weighted version of random.choice exactly means?. Checked yesterday, it works!

## Shop

Learn programming in R: courses

\$FREE

Best Python online courses for 2022

\$FREE

Best laptop for Fortnite

\$399+

Best laptop for Excel

\$

Best laptop for Solidworks

\$399+

Best laptop for Roblox

\$399+

Best computer for crypto mining

\$499+

Best laptop for Sims 4

\$

Latest questions

PythonStackOverflow

Common xlabel/ylabel for matplotlib subplots

PythonStackOverflow

Check if one list is a subset of another in Python

PythonStackOverflow

How to specify multiple return types using type-hints

PythonStackOverflow

Printing words vertically in Python

PythonStackOverflow

Python Extract words from a given string

PythonStackOverflow

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

PythonStackOverflow

Python os.path.join () method

PythonStackOverflow

Flake8: Ignore specific warning for entire file

## Wiki

Python | How to copy data from one Excel sheet to another

Common xlabel/ylabel for matplotlib subplots

Check if one list is a subset of another in Python

How to specify multiple return types using type-hints

Printing words vertically in Python

Python Extract words from a given string

Cyclic redundancy check in Python

Finding mean, median, mode in Python without libraries