分享一些自己学字典时遇到的一些问题


    有前两天列表与元组知识的沉淀,个人感觉字典这玩意儿还是很快上手滴~

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!!!)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值