如何对字典列表中指定元素的name值应用hash_in()函数?
处理字典列表的指定字段函数应用需求
场景说明
通过执行以下SQL语句获取字典列表tbl_headers:
tbl_headers = db_admin.execute("SELECT name, type FROM PRAGMA_TABLE_INFO(?);", table_name)
该列表结构示例:
[ {'name': 'id', 'type': 'INTEGER'}, {'name': 'abasdfasd', 'type': 'TEXT'}, {'name': 'sx', 'type': 'TEXT'}, {'name': 'password', 'type': 'NULL'}, {'name': 'asdf', 'type': 'TEXT'} ]
需求:对每个字典的name值应用hash_in()函数(password字段除外),同时完整保留原字典的结构。
解决方案
方法一:列表推导式(简洁写法)
processed_headers = [ {**item, 'name': hash_in(item['name']) if item['name'] != 'password' else item['name']} for item in tbl_headers ]
{**item}展开原字典的所有键值对,确保type等其他字段被保留- 条件判断实现:仅当
name不是password时,才对其应用hash_in(),否则保留原值
方法二:循环遍历(易读写法)
如果觉得列表推导式不够直观,也可以用基础循环实现:
processed_headers = [] for item in tbl_headers: # 复制原字典,避免修改原始数据 new_item = item.copy() if new_item['name'] != 'password': new_item['name'] = hash_in(new_item['name']) processed_headers.append(new_item)
常见问题分析
- 之前列表推导式仅返回
name值列表:是因为推导式只提取了hash_in(item['name']),没有构建完整的字典结构 map方法报错:map默认处理单个元素,若直接传入字典,需要额外编写处理整个字典的函数,不如上述方式直接
内容的提问来源于stack exchange,提问作者parmer_110
相关产品推荐
相关产品推荐

