2017-10-21 19 views
1

我有一個名稱列表。我的任務是從列表中製作一本字典,然後按性別將其分爲兩部分。我明白如何製作一本字典,但如何將它分成兩部分並在返回之後。 這是我迄今所做的:從列表中製作詞典,並在分成兩份之後

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

開始你的「人名」鍵的格式爲「NAME:GENDER」,並將它們分成「:」,然後從那裏開始...... –

回答

2

你可以使用字典理解即

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

我有一個問題括號()和{}之間有什麼區別?例如,我可以在names_dict.keys()中寫入m =(i:names_dict.get(i)for i,如果':M'在i中)? – AlTs

+0

'()'=元組和'{}'是字典。你可以在一個元組內使用key:value,它僅限於字典 – Dark

0

這種簡單的循環由遍歷的伎倆,我

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