如何修改Python单行字典推导式实现表名与文件名正确映射
问题解决:Python字典推导式匹配对应表名与文件路径
现有Python代码:
data = json.dumps({'conf':{a:b for a in table_name for b in file_url}}) print(data)
相关变量内容:
file_url包含的文件路径:sales_dy_20221022.csv sales_wk_20221022.csvtable_name包含的表名:sales_dy sales_wk
当前代码执行后,得到的结果不符合预期:
"conf": { "sales_dy": "sales_dy_20221022.csv", "sales_wk": "sales_dy_20221022.csv" }
需要修改代码,实现表名与对应文件路径的一一映射,得到如下预期结果:
"conf": { "sales_dy": "sales_dy_20221022.csv", "sales_wk": "sales_wk_20221022.csv" }
问题原因
原代码中的嵌套字典推导式会让每个表名遍历所有文件路径,最终每个表名对应的文件路径会被最后一次遍历到的值覆盖,因此出现所有表名指向同一个文件的问题。
解决方案
方案1:按顺序一一配对(依赖列表顺序一致)
使用zip()函数将table_name和file_url按顺序配对,确保每个表名对应到同位置的文件路径:
import json table_name = ["sales_dy", "sales_wk"] file_url = ["sales_dy_20221022.csv", "sales_wk_20221022.csv"] data = json.dumps({'conf': {a: b for a, b in zip(table_name, file_url)}}) print(data)
方案2:按文件名前缀匹配(不依赖列表顺序)
如果担心两个列表顺序不一致导致配对错误,可以通过文件名前缀匹配的方式关联表名和文件路径:
import json table_name = ["sales_dy", "sales_wk"] file_url = ["sales_dy_20221022.csv", "sales_wk_20221022.csv"] data = json.dumps({'conf': {a: next(b for b in file_url if b.startswith(a)) for a in table_name}}) print(data)
这两种方案都能得到预期的键值对映射结果。
内容的提问来源于stack exchange,提问作者Murat
相关产品推荐
相关产品推荐

