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.
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)
]