Python dict()追加数据
来源:互联网 发布:淘宝发货怎么设置 编辑:程序博客网 时间:2024/05/16 06:41
背景
为了举一反三,多种方式尝试解决问题。
问题
将列表[11, 22, 33, 44, 55, 66, 77, 88, 99]按大于66的存储在k1里,其余的存储在k2里。
本次的环境是在windows7下,我的python是python3.4.3
方法1:
也是接触python开始最先想到的,中规中矩的做法
# -*- encoding = utf-8 -*-all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]def dictSort():dic = dict()# loopfor value in all_items:if value > 66:if "k1" in dic.keys():dic["k1"].append(value)else:dic["k1"] = [value]else:if "k2" in dic.keys():dic["k2"].append(value)else:dic["k2"] = [value]print(dic)if __name__ == '__main__':dictSort()
结果输出
{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99]}
第一次写好代码后,调试发现有问题,
dic["k2"] = value
写成了这样,而实际dic["key"]是一个list,赋值方式不对导致出错了。
方法2
借助setdefault()
# -*- encoding = utf-8 -*-all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]def dictSortBysetdefault():dic = dict()# loop listfor value in all_items:if value >66:dic.setdefault("k1", []).append(value)else:dic.setdefault("k2", []).append(value)print(dic)if __name__ == '__main__':dictSortBysetdefault()
结果输出
{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99]}
方法2调试时,根据setdefault的API说明,D.setdefault(k[,]),看这写法以为[]是可以省略的,就写成了
dic.setdefault("k1").append(value)
结果出错了。
方法3
使用collections.defaultdict().
# -*- encoding = utf-8 -*-import collectionsall_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]def defDictSort():dic = collections.defaultdict(list)# loop listfor value in all_items:if value >66:dic["k1"].append(value)else:dic["k2"].append(value)print(dic)if __name__ == '__main__':defDictSort()
输出结果
defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99]})
定义字典变量的时候,原来还要指定values的属性,最开始写成了下面这样
dic = collections.defaultdict()
方法4:
使用D.fromkeys()生成一个“默认”的字典。然后根据条件再去追加values.
# -*- encoding = utf-8 -*-import collectionsall_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]def dictByFromKeys(): dic = {}.fromkeys(("k1", "k2")) # get values by loop list for value in all_items: if value > 66: if dic["k1"] is None: dic["k1"] = [value] else: dic["k1"].append(value) else: if dic["k2"] is None: dic["k2"] = [value] else: dic["k2"].append(value) print(dic)if __name__ == '__main__':dictByFromKeys()
结果输出如下所示:
{'k1': [77, 88, 99], 'k2': [11, 22, 33, 44, 55, 66]}
代码写完调试的时候,fromkeys()默认的value是None,上来拿到list的元素后就直接判断append了,导致报错:NoneType 没有append属性。
然后间接转换了一下,先去判断是否为None,如果是就直接赋值,如果不是,那证明已经有数据加入了,然后再使用append方法就没问题了。
方法5
借助defaultdict跟set,但缺点是,values是无序的。
# -*- encoding = utf-8 -*-import collectionsall_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]def dictBySet():dic = collections.defaultdict(set)# loop listfor value in all_items:if value > 66:dic["k1"].add(value)else:dic["k2"].add(value)print(dic)if __name__ == '__main__':dictBySet()
输出结果:
defaultdict(<class 'set'>, {'k1': {88, 99, 77}, 'k2': {33, 66, 11, 44, 22, 55}})
--- over ---
0 0
- Python dict()追加数据
- python dict 数据
- python Excel追加数据
- Python 使用 dict 创建二维数据、DataFrame
- python dict
- python dict
- python dict
- Python---dict
- python-dict
- python-dict
- Python dict
- Python dict
- Python-dict
- Python Dict
- 【Python】【Dict】dict 基本用法
- Python 读Dict数据的方法,解决key 不在dict的问题,get()函数,setdefault()函数
- python 中 列表(list)和字典(dict)数据排序
- 列表(list)和字典(dict)数据排序 Python
- 解释#define RCC ((RCC_TypeDef *) RCC_BASE)
- Swift 3.0 -常量和变量
- HTML5学习_day06(2)--html之相对定位
- 可以自动换行的RadioGroup (默认水平布局)
- HTML学习笔记
- Python dict()追加数据
- ORACLE 查看字符集
- Android属性动画(三)——TypeEvaluator(估值器)和Interpolator(插值器)
- iOS 报错:you don't have permission
- 计算背景图片的灰度值,设置文字的颜色
- VueJs 自定义过滤器使用总结
- bootstrap 的模态框 内部组件无法获取焦点
- pushlet的一般流程
- NVIDIA Jetson TX1(1)