# Picking from Dictionary probablity wise

## Issue

Let’s say I have a dictionary

``````{'us':
{'male':
{'given_names':
['Alex', 'Bob', 'Charlie']
},
'female':
{'given_names':
['Alice', 'Betty', 'Claire']
}
},

'uk':
{'male':
{'given_names':
['aaa', 'Bbb', 'cc']
},
'female':
{'given_names':
['ppp', 'ddd', 'sss']
}
}

}
``````

Now let’s say I want to get 60% US names, 40% UK names, but with 50 50 % males and females names.

How Can I do it?

Current approach? Trying to think something similar to this
But I guess it is more complex then that.

I was thinking to get all the names first, then applying a distribution from them? But it is not making some logical sense. Can someone help?

``````        # all_possible_names = [
#     name
#     for list_of_names in [
#         self.library[area][gender][
#             "given_names"
#         ]
#         for gender in self.genders
#         for area in self.name_areas
#     ]
#     for name in list_of_names
# ]
# print(all_possible_names) `
``````

Thanks.

## Solution

Use `random.choices` with a weight and `choice` to split between male/female, assuming your dictionary is named `d` and `N` is the total amount of names you’d like, then:

``````from random import choice, choices

N = 3

names = [
choice(d[country][choice(['male', 'female'])]['given_names'])
for country in choices(['us', 'uk'], weights=[0.6, 0.4])
for _ in range(N)
]
``````

Answered By – Jon Clements

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0