2017-10-21 5 views
1

私は名前のリストを持っています。私の仕事はリストから辞書を作り、それをセックスで2つに分けた後です。私は1つの辞書を作る方法を理解していますが、それを2つに分割して返す方法は分かります。一覧から辞書を作成し、2つに分割した後

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

この括弧()と{}の違いは何ですか?たとえば、i:のM :(i:names_dict.get(i)をnames_dict.keys()に書くことはできますか? – AlTs

+0

'()' =タプルと '{}'は辞書です。 key:valueは辞書内のタプル内でのみ使用できます – Dark

0

この単純なループ、すなわち、dictの内包表記を使用することができますオーバーループすることにより、

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 
関連する問題