Python检查字典字符串值唯一的练习代码存在哪些错误?
代码存在的核心错误
check_list初始化位置错误:你把check_list = []放在了双层for循环的内部,每次循环都会清空重置这个列表,等循环跑完之后,check_list里只会保留最后一次外层循环比较的最后一个值,完全达不到统计重复值的目的。- 判断逻辑完全错误:你最后用
check_list != dic来判断,前者是存值的列表,后者是字典对象,两者类型都不一样,永远不可能相等,所以不管输入字典是不是符合要求,都会走第一个返回分支,自然dic_2也会被判定为没有唯一条目。 - 双层循环的逻辑冗余:两层遍历所有值的写法本身时间复杂度是O(n²),而且没有对同一个值重复计数的逻辑,就算你改了初始化位置,也会因为同一个值和自己比较被误判为重复。
- 函数返回值不符合题目要求:题目要求返回布尔值True/False,你的代码返回的是字符串,和题目要求不符。
修复方案
最简单的判断方法是利用集合去重的特性,只要字典值的列表长度和去重后的集合长度相等,就说明没有重复值:
def is_1_to_1(dic): # 利用集合去重特性,比较值的原始长度和去重后长度 values = list(dic.values()) if len(values) == len(set(values)): # 若严格按照题目要求返回布尔值,可替换为 return True return f"Dictionary: {dic.items()} does have unique entries." else: # 若严格按照题目要求返回布尔值,可替换为 return False return f"Dictionary: {dic.items()} does not have unique entries." dic_1 = {"Marty": "206-9024", "Hawking": "123-4567", "Smith": "949-0504", "Newton": "123-4567"} dic_2 = {"Marty": "206-9024", "Hawking": "555-1234", "Smith": "949-0504", "Newton": "123-4567"} print(is_1_to_1(dic_1)) print(is_1_to_1(dic_2))
运行输出:
Dictionary: dict_items([('Marty', '206-9024'), ('Hawking', '123-4567'), ('Smith', '949-0504'), ('Newton', '123-4567')]) does not have unique entries. Dictionary: dict_items([('Marty', '206-9024'), ('Hawking', '555-1234'), ('Smith', '949-0504'), ('Newton', '123-4567')]) does have unique entries.
内容的提问来源于stack exchange,提问作者Leoucl
相关产品推荐
相关产品推荐

