实习笔试准备(1)

1 第一题

1.1 题目描述

抖音上不同的用户类型我们有不同的用户模型文件。

我们有一个模型配置文件,里面有很多的不同的用户类型和模型文件。我们需要找出每个模型对应的是哪些用户类型

给定一行输入,格式是:a b

a表示这个用户的用户类型,b表示这个用户对应的模型文件。

请你输出每个模型文件对应的用户类型。

1.2 输入描述

输入第1行:用户类型N

接下来的N行:用户类型 模型文件

1.3 输出描述

每行输出:用户类型 模型文件1 模型文件2 。。。

注意1:每个模型文件可能对应多个用户类型,用户类型之间用 空格 切分。

注意2:如果有多个用户类型输出,用户类型之间的排序按照字典序。

1.4 测试用例

1.4.1 input

1
abc 1.txt

1.4.2 output

1.txt abc

1.5 代码示例

def find_user_models():
    user_models = {}
    n = int(input("输入用户类型的数量:"))

    for _ in range(n):
        user_type, model_file = input("输入用户类型和模型文件,以空格分隔:").split()
        if model_file in user_models:
            user_models[model_file].append(user_type)
        else:
            user_models[model_file] = [user_type]

    for model_file, user_types in sorted(user_models.items()):
        print(model_file, ' '.join(sorted(user_types)))


if __name__ == '__main__':
    find_user_models()

1.5.1 input

输入用户类型的数量:5
输入用户类型和模型文件,以空格分隔:TypeA Model1
输入用户类型和模型文件,以空格分隔:TypeB Model2
输入用户类型和模型文件,以空格分隔:TypeA Model3
输入用户类型和模型文件,以空格分隔:TypeC Model1
输入用户类型和模型文件,以空格分隔:TypeB Model3

1.5.2 output

Model1 TypeA TypeC
Model2 TypeB
Model3 TypeA TypeB

2 代码解释 

2.1 split()

split()是一个字符串方法,用于将字符串按照指定的分隔符进行分割,并返回一个包含分割后部分的列表

语法如下:

string.split(separator, maxsplit)

参数说明:

  • separator(可选):指定的分隔符,默认为所有的空字符,包括空格、制表符、换行符等。
  • maxsplit(可选):指定最大的分割次数。如果提供了该参数,则最多分割出maxsplit+1个部分。

示例:

text = "Hello, how are you?"
parts = text.split()  # 使用默认的分隔符(空格),将字符串分割为多个部分
print(parts)  # 输出:['Hello,', 'how', 'are', 'you?']

text = "apple,banana,orange"
fruits = text.split(",")  # 使用逗号作为分隔符,将字符串分割为多个部分
print(fruits)  # 输出:['apple', 'banana', 'orange']

text = "one,two,three,four,five"
parts = text.split(",", 2)  # 使用逗号作为分隔符,最多分割出两个部分
print(parts)  # 输出:['one', 'two', 'three,four,five']

split()方法常用于将字符串分割成单词或根据特定的分隔符提取数据。

2.2 user_models[model_file] = [user_type]

这行代码将一个用户类型(user_type)作为值,与模型文件(model_file)作为键,添加到一个名为 user_models 的字典中。

示例:

user_models = {}  # 创建一个空字典

model_file = "model1.pkl"
user_type = "admin"

user_models[model_file] = [user_type]  # 将用户类型作为值,模型文件作为键添加到字典中

print(user_models)

输出:

{'model1.pkl': ['admin']}

通过将模型文件作为键,可以将用户类型与相应的模型文件关联起来,并在字典中进行存储。如果有多个用户类型对应于同一个模型文件,可以使用列表来存储多个用户类型值。这样,可以根据模型文件查找对应的用户类型。

2.3 user_models[model_file].append(user_type)

这行代码将用户类型(user_type)追加到 user_models 字典中已存在的键 model_file 对应的值的列表中。

示例:

user_models = {'model1.pkl': ['admin']}

model_file = "model1.pkl"
user_type = "user"

user_models[model_file].append(user_type)  # 将用户类型追加到列表中

print(user_models)

输出:

{'model1.pkl': ['admin', 'user']}

在这个例子中,原始的 user_models 字典中已经有了键为 "model1.pkl" 的项,对应的值是 ['admin']。通过使用 append() 方法,我们将新的用户类型 "user" 追加到这个值的列表中。这样,user_models 字典中的值就更新为 ['admin', 'user'],它与键 "model1.pkl" 相关联。

2.4 for model_file, user_types in sorted(user_models.items()): 

    for model_file, user_types in sorted(user_models.items()):
        print(model_file, ' '.join(sorted(user_types)))

这段代码使用一个循环遍历 user_models 字典中的每个键值对,并按照的字母顺序进行排序。然后,对于每个键值对,将模型文件名(model_file)和用户类型列表(user_types)输出到控制台。

这段代码中的 sorted() 函数用于对 user_models.items() 返回的键值对进行排序,以确保按照模型文件名的字母顺序(键)输出。

然后,在循环内部,model_file 变量存储模型文件名,user_types 变量存储与该模型文件名关联的用户类型列表。

print(model_file, ' '.join(sorted(user_types)))模型文件名排序后的用户类型列表输出到控制台。使用 ' '.join(sorted(user_types))用户类型列表转换为字符串,并在每个用户类型之间用空格分隔

这样,循环将遍历并打印 user_models 字典中每个模型文件及其关联的用户类型列表,以排序后的形式呈现。

2.5 user_models.items()

user_models.items() 是一个字典方法,返回一个包含字典所有键值对的可迭代对象。每个键值对以元组的形式表示,其中键是元组中的第一个元素,值是元组中的第二个元素

示例:

user_models = {'model1.pkl': ['admin', 'user'], 'model2.pkl': ['guest']}

items = user_models.items()
print(items)

输出:

dict_items([('model1.pkl', ['admin', 'user']), ('model2.pkl', ['guest'])])

在这个例子中,user_models.items() 返回的是一个包含两个键值对的可迭代对象。每个键值对都是以元组的形式表示的。

通过使用 items() 方法,可以方便地遍历字典的键值对,进而操作键和值。在上述代码中的循环中,我们可以使用 items() 方法来遍历 user_models 字典中的每个模型文件和相应的用户类型列表。

2.6 join()

join() 是一个字符串方法,用于将一个可迭代对象中的元素连接成一个字符串。

语法如下:

separator.join(iterable)

参数说明:

  • separator:用于连接元素的字符串。
  • iterable:一个可迭代对象,例如列表、元组、字符串等。

示例:

words = ['Hello', 'world', 'how', 'are', 'you']
sentence = ' '.join(words)  # 使用空格连接列表中的单词
print(sentence)  # 输出:Hello world how are you

numbers = (1, 2, 3, 4, 5)
number_string = '-'.join(str(num) for num in numbers)  # 将元组中的数字转换为字符串,并使用破折号连接
print(number_string)  # 输出:1-2-3-4-5

text = 'Python is awesome'
letters = ':'.join(text)  # 使用冒号连接字符串中的每个字符
print(letters)  # 输出:P:y:t:h:o:n: :i:s: :a:w:e:s:o:m:e

join() 方法常用于将多个字符串或字符列表连接成一个完整的字符串。通过指定连接元素之间的分隔符,可以实现定制化的连接操作。

2.7 怎么确保是按照模型文件名的字母顺序输出的?

要确保按照模型文件名的字母顺序输出,可以使用sorted()函数对字典的键进行排序。在for循环中,使用sorted()函数对user_models.items()返回的键值对进行排序。

示例:

user_models = {'model2.pkl': ['guest'], 'model1.pkl': ['admin', 'user'], 'model3.pkl': ['manager']}

for model_file, user_types in sorted(user_models.items(), key=lambda x: x[0]):
    print(model_file, ' '.join(user_types))

输出:

model1.pkl admin user
model2.pkl guest
model3.pkl manager

在上述示例中,通过使用sorted()函数并指定key参数,我们可以按照字母顺序对user_models.items()返回的键值对进行排序。key=lambda x: x[0]表示按照键(模型文件名)进行排序。

然后,在for循环中,按照排序后的顺序依次遍历排序后的键值对,并输出模型文件名和用户类型列表。使用' '.join(user_types)将用户类型列表转换为字符串,并用空格分隔

这样,输出将按照模型文件名的字母顺序进行排列。

2.8 默认的是按照键值排序吗?

不是,默认情况下,sorted()函数按照字典的键进行排序,而不是键值。

如果要按照键值进行排序,可以使用sorted()函数的key参数,并传递一个函数或Lambda表达式来指定排序的依据。

示例:

user_models = {'model2.pkl': ['guest'], 'model1.pkl': ['admin', 'user'], 'model3.pkl': ['manager']}

for model_file, user_types in sorted(user_models.items(), key=lambda x: x[1]):
    print(model_file, ' '.join(user_types))

输出:

model1.pkl admin user
model3.pkl manager
model2.pkl guest

在上述示例中,通过指定key参数为lambda x: x[1],我们将排序的依据设置为字典的值(用户类型列表)而不是键。这样,sorted()函数将按照键值进行排序,即按照用户类型列表的内容进行排序。

然后,在for循环中,按照排序后的顺序依次遍历键值对,并输出模型文件名和用户类型列表。

请注意,使用sorted()函数的key参数进行排序时,要确保键值对中的值是可比较的类型,以便进行排序操作。

猜你喜欢

转载自blog.csdn.net/aaaccc444/article/details/131055183