Как разделить список имен на мужские и женские
К примеру есть список
names = ['Андрей', 'Елена', 'Юлия', 'Роберт', 'Валерия', 'Амбер']
Как можно из списка записать м. имена в список males, а ж. в список females.
P.S. в данном случае str.endswith не поможет, ибо есть много женских имё не оканчивающиеся на А (см. Валерия, Юлия, Амбер)
Ответы (3 шт):
Скачиваете, например, отсюда http://analiz-imeni.ru/women/vse-zhenskie-imena.htm список женских имен. Если очень хочется - можно и мужские поискать. И пишете скрипт, отбирающий одни и другие. Работы - на час. Правда со всякой экзотикой типа "Амбер" придется бороться самостоятельно, путем периодического пересмотра-дополнения этих списков.
Скачиваешь отсюда "База данных имен и фамилий в формате JSON.zip" и кидаешь в директорию с основным модулем
import json
def json_to_dict(filename):
with open(filename, encoding='utf-8-sig') as f:
return json.load(f)
def sort(names, all_names, male_names = [], female_names = []):
for dicti in all_names:
name = dicti['Name']
if name in names:
if dicti['Sex'] == 'Ж':
female_names.append(name)
else:
male_names.append(name)
return male_names, female_names
def main():
names = ['Андрей', 'Елена', 'Юлия', 'Роберт', 'Валерия', 'Амбер']
filename = 'russian_names.json'
all_names = json_to_dict(filename)
sorted_names = sort(names, all_names)
print(sorted_names[0])
print(sorted_names[1])
if __name__ == '__main__':
main()
Результат:
['Андрей', 'Роберт']
['Валерия', 'Елена', 'Юлия', 'Амбер']
P.S. в данном случае str.endswith не поможет, ибо есть много женских имё не оканчивающиеся на А (см. Валерия, Юлия, Амбер)
С «Амбер» вам метод .endswith() не поможет, но с окончанием на я да — метод .endswith() может в качестве параметра принять не только одну строку, но и кортеж строк:
In[6]: names = ['Андрей', 'Елена', 'Юлия', 'Роберт', 'Валерия', 'Амбер']
In[7]: females = [name for name in names if name.endswith(("а", "я"))]
In[8]: females
['Елена', 'Юлия', 'Валерия']