python的index函数使用问题

您所在的位置:网站首页 index函数空值返回0 python的index函数使用问题

python的index函数使用问题

2023-05-20 08:24| 来源: 网络整理| 查看: 265

python的index() 函数使用问题

文章目录 python的index() 函数使用问题一.需求|两个嵌套着字典元素的列表部分数据|我的需求|我写的代码 二.代码问题及优化方案|问题|原因|优化及解决方案1方案12方案2 三.总结1、index() 函数原理2、创建一个新字典来映射该字典的key和value

一.需求

​ 在编写项目代码时,有这么个需求:两个嵌套着字典元素的列表做对比,其中字典中有两个key是一样的,若两个字典中key对应的value值相同,则把字典中另一个指定的key和value值添加到另一个字典中,最后生成一个新的列表

|两个嵌套着字典元素的列表部分数据 csv_info = [{'xuehao': '20230513','grade': 'No', 'ind': '21523', 'zhu_grade': ''}, {'xuehao': '20230519','grade': 'No', 'ind': '21524', 'zhu_grade': ''}, {'xuehao': '20230514','grade': 'No', 'ind': '21525', 'zhu_grade': ''}, {'xuehao': '20230515','grade': 'No', 'ind': '21526','zhu_grade': ''}, {'xuehao': '20230516','grade': 'No', 'ind': '21527','zhu_grade': '100'}, {'xuehao': '20230517','grade': 'No', 'ind': '21528', 'zhu_grade': ''}, {'xuehao': '20230518','grade': 'No', 'ind': '21529', 'zhu_grade': ''}] excel_info = [{'xuehao': '20230519','city': '', 'country': '', 'grade': '', 'region': 'hebei'}, {'xuehao': '20230518','city': '', 'country': '', 'grade': '', 'region': 'henan'}, {'xuehao': '20230517','city': '', 'country': '', 'grade': '', 'region': ''}, {'xuehao': '20230516','city': '', 'country': '', 'grade': '', 'region': ''}, {'xuehao': '20230515','city': '', 'country': '', 'grade': '', 'region': ''}] |我的需求

​ 若两个列表数据中若字典key为xuehao对于的值有相等的,就把csv_info中key为’zhu_grade对应的value值,赋值给excel_info中的key为’grade’对应的value值,excel_info的key为’grade’是新增的key

|我写的代码 xuehao_list = [grade_xuehao['xuehao'] for grade_xuehao in excel_info] for info in csv_info: if info['xuehao'] in xuehao_list: xuehao_index = xuehao_list.index(info['xuehao']) if info['zhu_grade'] != '': excel_info[xuehao_index]['grade'] = info['zhu_grade'] else: excel_info[xuehao_index]['grade'] = 'No grade' 二.代码问题及优化方案 |问题

两个列表中字典数据量过多即当列表csv_info嵌套着95450个字典数据并且列表excel_info嵌套着 126369个字典数据时(我编写代码需要处理的数据集),程序运行会很慢。

|原因

​ index() 函数用于查找列表中某个元素第一次出现的位置,并返回其索引值。 在代码中,xuehao_index 变量存储了 csv_info 中当前迭代的字典中的 ‘xuehao’ 值在 xuehao_list 中的位置,以便将相应的 ‘zhu_grade’ 值赋给 excel_info 中相应的字典。

​ 它将在 csv_info 列表中的每个元素上运行 index() 函数,而在 xuehao_list 列表中查找每个元素的位置。 因此,如果 csv_info 列表中有很多元素,每个元素都要在 xuehao_list 中查找一次,这将导致程序运行变慢。

|优化及解决方案 1方案1

(1)代码:

# 将excel_info中的xuehao和对应的位置存储到字典xuehao_dict中 xuehao_dict = {excel_xuehao['xuehao']: i for i, excel_xuehao in enumerate(excel_info)} # 使用字典推导式将csv_info 中的信息赋值给excel_info for grade_info in csv_info : xuehao = grade_info['xuehao'] if xuehao in xuehao_dict: index = xuehao_dict[xuehao] excel_info[index]['grade'] = grade_info['zhu_grade'] or 'No grade'

(2)说明

​ 为了提高程序的效率,可以使用字典来存储excel_info中的xuehao和对应的位置,这样可以避免每次查找xuehao所在的位置都需要遍历整个列表。另外,使用字典推导式可以更简洁地实现将csv_info 中的信息赋值给excel_info。

​ 这段代码首先创建了一个字典xuehao_dict,用于存储excel_info中每个xuehao对应的位置,其中i表示位置,excel_xuehao表示每个字典数据。然后,使用一个for循环遍历csv_info 中的每个字典数据,获取xuehao值,并在xuehao_dict中查找对应位置。如果查找到位置,则将csv_info 中的zhu_grade值赋值给excel_info中对应位置的grade键。 注意,这里使用了or运算符,如果zhu_grade值为空,则将’No grade’赋值给grade键。

2方案2

(1)代码:

# 创建xuehao地址和成绩信息的字典映射 xuehao_grade_map = {grade_info['xuehao']: grade_info['zhu_grade'] or 'No grade' for grade_info in csv_info } # 更新excel_info列表中的成绩信息 for excel_grade in excel_info: xuehao = excel_grade['xuehao'] excel_grade['grade'] = xuehao_grade_map.get(xuehao, 'No grade') # 创建包含新键的excel_info列表 excel_info_with_grade = [{**excel_grade, 'grade': excel_grade['grade']} for excel_grade in excel_info]

(2)说明

​ 可以使用一个字典来映射xuehao和成绩信息。只需要遍历列表一次,而不需要在列表中搜索xuehao地址。此外,可以使用字典推导式来创建包含新键的excel_info列表。

​ 首先,我们使用字典推导式创建一个xuehao和成绩信息的字典映射。这个字典中的键是xuehao地址,值是成绩信息或’No grade’字符串。这个字典只需要在csv_info 列表上进行一次迭代,因此它比在excel_info列表上进行迭代更快。

​ 接下来,我们遍历excel_info列表,并为每个条目添加成绩信息。我们从当前条目的xuehao获取成绩信息,并使用字典get()方法获取映射字典中对应的值。如果映射字典中没有对应的值,则默认为’No grade’字符串。最后,我们使用字典推导式创建一个包含新键的excel_info列表。在这个列表中,我们使用**操作符将当前字典的所有键-值对添加到新字典中,并用’grade’键覆盖旧值,从而添加新键。这个修改后的代码应该会比之前的代码更快,并且输出结果中应该会包含’grade’键。

三.总结 1、index() 函数原理

​ index() 函数原理是遍历整个列表,用于查找列表中某个元素第一次出现的位置,并返回其索引值。因此,在大型数据集上运行 index() 函数会很慢,特别是在嵌套循环中使用时,时间复杂度可能会呈指数级增长。

函数原理是遍历整个列表,用于查找列表中某个元素第一次出现的位置,并返回其索引值。因此,在大型数据集上运行 index() 函数会很慢,特别是在嵌套循环中使用时,时间复杂度可能会呈指数级增长。

2、创建一个新字典来映射该字典的key和value


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3