2017-10-21 33 views
1

J'ai une liste de noms. Ma tâche est de faire un dictionnaire de la liste et après le diviser en deux par le sexe. Je comprends comment faire un dictionnaire, mais comment le diviser par deux et après les renvoyer. C'est ce que je l'ai fait jusqu'à présent:Faire un dictionnaire de la liste et après la scission en deux

def to_dictionary(names: list) -> dict: 
    """ Make a dictionary from a list of names.""" 
    dct = dict() 
    for i in names: 
     dct[i] = names.count(i) 
    return dct 


def to_sex_dicts(names_dict: dict) -> tuple: 
    """Divide the names by sex to 2 different dictionaries.""" 


if __name__ == '__main__': 
    example_names = ("Kate:F\n" * 1000 + "Alex:M\n" * 800 + "Marina:F\n" * 600 + "Artyom:M\n" * 400).rstrip("\n").split("\n") 
    people = to_dictionary(example_names) 
    print(people) 
    male_names, female_names = to_sex_dicts(people) 
    print(male_names) 
    print(female_names) 
+0

Commencez par bouclez vos clés 'people' qui sont dans le format de" NAME: GENDER "et les diviser sur": ", puis partir de là ... –

Répondre

2

vous pouvez utiliser une compréhension dict-à-dire

def to_sex_dicts(names_dict: dict) -> tuple: 
    """Divide the names by sex to 2 different dictionaries.""" 
    m = {i : names_dict.get(i) for i in names_dict.keys() if ':M' in i} 
    f = {i : names_dict.get(i) for i in names_dict.keys() if ':F' in i} 
    return m,f 

male_names, female_names = to_sex_dicts(people) 
print(male_names) 
{'Artyom:M': 400, 'Alex:M': 800} 

print(female_names) 
{'Marina:F': 600, 'Kate:F': 1000} 
+0

J'ai une question quelle est la différence entre ces parenthèses() et {}? Par exemple, puis-je écrire m = (i: names_dict.get (i) pour i dans names_dict.keys() si ': M' dans i)? '()' = Tuple et '{}' est un dictionnaire. – AlTs

+0

Vous pouvez utiliser key: value dans un tuple uniquement dans les dictionnaires – Dark

0

Cette simple boucle le tour est joué pour moi

def to_sex_dicts(names_dict: dict) -> tuple: 
    females = [] 
    males = [] 
    for k in names_dict: 
     if k.endswith(':F'): 
      females.append(k) 
     elif k.endswith(':M'): 
      males.append(k) 
     else: 
      raise ValueError("Illegal Name") 
    return males, females