Python如何将字典中单个键值对的类型转换为字符串?
嘿,这个需求其实挺常见的,给你几个简便的实现方式,挑个贴合你代码习惯的用就行:
方法一:构建单个字典时直接修改(最直观)
在你把每行数据转成字典后,直接针对目标键做类型转换,代码改动最小,可读性也强:
def logs(query): client = gcb.Client() query_job = client.query(query) CSV_COLUMNS ='end_time,device,device_os,device_os_version,latency,megacycles,cost,device_brand,device_family,browser_version,app,ua_parse,key'.split(',') ret = {'instances': []} target_key = 'end_time' # 替换成你实际要转换的键名 for rows in query_job.result(): var = list(rows) l1 = dict(zip(CSV_COLUMNS, var)) # 关键:把目标键的值转成字符串,怕键不存在的话可以加个判断 if target_key in l1: l1[target_key] = str(l1[target_key]) ret['instances'].append(l1) return ret
方法二:用列表推导式批量处理
如果已经生成了instances列表,或者想把转换逻辑集中在一处,可以用字典解包的方式批量修改,代码更简洁:
def logs(query): client = gcb.Client() query_job = client.query(query) CSV_COLUMNS ='end_time,device,device_os,device_os_version,latency,megacycles,cost,device_brand,device_family,browser_version,app,ua_parse,key'.split(',') ret = {'instances': []} for rows in query_job.result(): var = list(rows) l1 = dict(zip(CSV_COLUMNS, var)) ret['instances'].append(l1) # 批量转换目标键的类型 target_key = 'end_time' ret['instances'] = [ {**item, target_key: str(item[target_key])} for item in ret['instances'] if target_key in item # 可选:避免键不存在报错 ] return ret
方法三:在生成数据列表时提前转换
如果不想碰字典操作,也可以在把行数据转成列表后,直接找到目标键对应的索引做转换:
def logs(query): client = gcb.Client() query_job = client.query(query) CSV_COLUMNS ='end_time,device,device_os,device_os_version,latency,megacycles,cost,device_brand,device_family,browser_version,app,ua_parse,key'.split(',') ret = {'instances': []} target_key = 'end_time' # 先拿到目标键在列名中的位置 target_idx = CSV_COLUMNS.index(target_key) for rows in query_job.result(): var = list(rows) # 直接修改对应位置的元素为字符串 var[target_idx] = str(var[target_idx]) l1 = dict(zip(CSV_COLUMNS, var)) ret['instances'].append(l1) return ret
这三种方法都能高效实现需求,其中方法一最适合大多数场景,改动小还容易维护~
内容的提问来源于stack exchange,提问作者Prof. Falken
相关产品推荐
相关产品推荐

