有前两天列表与元组知识的沉淀,个人感觉字典这玩意儿还是很快上手滴~
OK,话不多说还是先上图:
# 字典是一个无序的数据集合,使用print输出时 # 输出的顺序和定义的顺序通常是不一致的 # 字典是python中除列表外最灵活的函数 # 类似于C语言中的结构体 xiaoming = {"name": "xiaoming", "age": 19, "height": 1.80, "weight": 90} print(xiaoming)
怎么说,字典第一眼给我一种特别亲切的感觉:列表(元组)是你么?列表(元组)~
他们有的函数也大同小异:
xiaoming_dict = {"name": "xiaoming"} # 取值,与列表不同,字典中[]内的内容不再是索引值 # 是一个确切的key(与字典中数据是无序组合有关) # 那么如果key错误,程序自然也会报错2333 print(xiaoming_dict["name"]) # 往字典中增加元素 xiaoming_dict["gender"] = True # 如果希望增加的元素与字典中存在的元素重名可是会直接改写的哦! # 其实也是修改字典内容的方法辣~ xiaoming_dict["name"] = "kali" # .pop删除字典中内容,和列表的差不太多,不存在的自然也无法删除咯! xiaoming_dict.pop("name") print(xiaoming_dict)
也没啥嘛,和之前的列表几乎如出一辙2333
偏爱钻牛角尖的我怎么这么放弃呢!(最终的结果是给自己整懵逼了555555)
personal_information = {"name": "xiaoming"} # 计算字典内所含元素 print(len(personal_information)) # 合并字典,如果被合并的字典中有重复的键值,则会被覆盖 extern_information = {"weight": "60", "height": "1.90", "name": "kali"} personal_information.update(extern_information) for key in personal_information: print("%s - %s "% (key, personal_information[key])) # 清空字典 #personal_information.clear() print(personal_information)
就这破烂玩意(哇你的代码好丑哦!咳咳....别注意这些细节(我有什么办法,我也很绝望啊..))
一开始的输出结果是酱紫的:
1
height - 1.90
weight - 60
name - kali
{'height': '1.90', 'weight': '60', 'name': 'kali'}
注意看,接下来就是问题所在点:
personal_information = {"name": "xiaoming"} # 计算字典内所含元素 print(len(personal_information)) # 合并字典,如果被合并的字典中有重复的键值,则会被覆盖 extern_information = {"weight": "60", "height": 1.90, "name": "kali"} personal_information.update(extern_information) for key in personal_information: print("%s - %s "% (key, personal_information[key])) # 清空字典 #personal_information.clear() print(personal_information)
这里我把"height":"1.90",改成了"height":1.90
结果输出就变成了这样
1
weight - 60
name - kali
height - 1.9
{'weight': '60', 'name': 'kali', 'height': 1.9}
height位置发生了精度的丢失(好吧,str有个毛的精度)
# 如果说键值是int 或者 float型的,那么我在下面仍然用%s输出 # 解释器会妥协帮我把数据转成str型?还是聪明地识别出我的错误,自动修改? # 为此我曾经将"height":"1.90",改成"height":1.90,试着单步跟踪一波~ # 最后发现它只会告诉我key = 'height' {str} # 可是输出来的personal_information[key]的值却有变化!!! # "1.90"输出仍然是1.90;然而1.90输出则转变成了1.9 # 挺纠结的,如果你说是字符串类型的话应该照常输出1.90然而精度却发生了丢失 # 所以我就姑且把它认为是解释器机智地改成float型了~~~ # (QAQ大哥轻虐,我实在不明白这到底是咋回事??希望有懂的大神给我指点下迷津)
最后我自己得出一个很不负责的结论:字典最好别用遍历(for)!(诶诶,兄弟有话好好说,先把手里的板砖放下..)
好趴好趴,其实我是真没辙了,想不出这是为啥,真的真的希望有懂得大神给我留个言或者什么的,告诉我为什么,小萌新感激不尽!!(大神别走带带我!我会喊666!!!)