首页 > 解决方案 > 在 Python 中创建关于特定人的爱好的字典名称:[hobby_1, hobby_2]

问题描述

我该怎么做呢?假设我有一个 .txt 文件,它看起来像下面第一个代码块中的内容,请记住 1 个名称可能不止一次地出现在 .txt 文件中,例如 Jack 的爱好是制作和滑板。

Jack:crafting
Peter:hiking
Wendy:gaming
Monica:tennis
Chris:origami
Sophie:sport
Monica:design
Carmen:sport
Chris:sport
Monica:skateboarding
Carmen:cooking
Wendy:photography
Monica:tennis
Cooper:yoga
Wendy:sport
Cooper:movies
Monica:theatre
Cooper:yoga
Chris:gaming
Molly:fishing
Jack:skateboarding

代码

def create_dictionary(file):
    """
    Create dictionary about given peoples' hobbies as Name: [hobby_1, hobby_2].

    :param file: original file path
    :return: dict
    """
    dct = {}
        with open(file, encoding='utf-8') as file:
             for line in file:
                 ???

提前谢谢了。

标签: python

解决方案


您可以defaultdict使用 alist作为工厂,如果密钥不存在,它会使用 a 初始化映射,list因此您可以直接append

from collections import defaultdict

def create_dictionary(file):
    dct = defaultdict(set)
    with open(file, encoding='utf-8') as file:
        for line in file:
            name, hobby = line.rstrip().split(":")
            dct[name].add(hobby)
    return dct
    # return {k: list(v) for k, v in dct.items()} if for later you need values to be list

返回

{
    "Jack":   ["crafting","skateboarding"],
    "Peter":  ["hiking"],
    "Wendy":  ["gaming","photography","sport"],
    "Monica": ["tennis","design","skateboarding","tennis","theatre"],
    "Chris":  ["origami","sport","gaming"],
    "Sophie": ["sport"],
    "Carmen": ["sport","cooking"],
    "Cooper": ["yoga","movies","yoga"],
    "Molly":  ["fishing"]
}

推荐阅读