标签:week map item python value 处理 dict key data
之前在写echarts报表时,遇到一个处理数据的问题
情况描述:
折线图需要展示周一~周日的数据,但是从数据库查出来的数据却是类似这样的
{'周一': 1, '周三': 5, '周四': 2}
前端需要的数据是这样的:
[{'周一': 1}, {'周二': 0}, {'周三': 5}, {'周四': 2}, {'周五': 0}, {'周六': 0}, {'周日': 0}]
所以需要在程序中处理下,把那些数据为0的日期也放到数组中,并且按照顺序排列,这样折线图才能连贯起来,如下
所以现在有一道题:
给定一个 {日期: 数据} 数据字典,如 {'周一': 1, '周三': 5, '周四': 2},请补全里面缺失的日期,并且对应数据为0,
期望输出:[{'周一': 1}, {'周二': 0}, {'周三': 5}, {'周四': 2}, {'周五': 0}, {'周六': 0}, {'周日': 0}]
方法1:
dict_value = {'周二': 1, '周三': 5, '周四': 2} print("*************打印dict_value*************") print(dict_value) week = {"周一": 0, "周二": 0, "周三": 0, "周四": 0, "周五": 0, "周六": 0, "周日": 0} week.update(dict_value) # 使用update方法,把dict_value合并到week中,这样会把相同key的值更新(dict_value中的值取代week中相同key的值) print("*************打印week*************") print(week) statistics_data = [] # 定义一个空列表 for t in week.items(): # 遍历week字典所有的键值对(每一个键值对会以元组的形式返回)
statistics_data.append({ # 把元祖重新组合成字典后,追加到statustics中 "name": t[0], "value": t[1] }) print("*************statistics_data*************") print(statistics_data)
方法2:
def magic(x): week = {'周一': 0, '周二': 0, '周三': 0, '周四': 0, '周五': 0, '周六': 0, '周日': 0} for i in x: for key in week: if key == i: week[key] = x[key] return week if __name__ == '__main__': dict_value = {'周二': 1, '周三': 5, '周四': 2} week = magic(dict_value) statistics_data = [] for t in week.items(): statistics_data.append({"name": t[0], "value": t[1]}) print(statistics_data)
magic函数接收一个参数,这个参数是一个字典
外层for循环,遍历字典x(遍历字典时,会遍历其中的key)
内层for循环遍历字典week,
如果week某个元素的key=x某个元素的key,则把x[key]对应的值赋给week[key]
这样就完成了数据的替换
方法3: 打算使用map来实现
首先定义一个函数
def test(item: dict, origin_data: dict): item_key = list(item.keys())[0] if item_key in origin_data: item[item_key] = origin_data[item_key] else: item[item_key] = 0 return item
item 参数表示一个字典,只包含一个键值对 {key: value};
origin_data 参数也表示一个字典,它包含多个键值对,它就是从数据库读出来的数据 ,如{'周二': 1, '周三': 5, '周四': 2};
取出item的key,如果这个key在origin_data中,则用 origin_data对应key的value替换 item中的value;
否则给item的值赋0;
本来这是要往map中传的函数,但是有个问题,这个函数接收2个参数
通过网上冲浪一番,找到了一个解决方法:使用偏函数
import functools def test(item: dict, origin_data: dict): item_key = list(item.keys())[0] if item_key in origin_data: item[item_key] = origin_data[item_key] else: item[item_key] = 0 return item if __name__ == '__main__': x = [{'周一': 0}, {'周二': 0}, {'周三': 0}, {'周四': 0}, {'周五': 0}, {'周六': 0}, {'周日': 0}] y = {'周一': 1, '周三': 5, '周四': 2} magic = functools.partial(test, origin_data=y) # 偏函数 t = map(magic, x) # 调用map方法 print(list(t))
使用 functools.partial 生成了一个偏函数,它接收一个函数,和一个固定的变量;
然后调用map方法,把偏函数传入,这样magic函数会作用于x中的每组元素,一个流程下来就把x中的所有元素替换完成~
标签:week,map,item,python,value,处理,dict,key,data 来源: https://www.cnblogs.com/hanmk/p/15745805.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。