Python 3.x dict的特点

# coding=utf-8
import traceback
import collections
# dict 的特点
# 1.查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降
# 查找速度快的代价是,dict占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢
if __name__ == '__main__':
    # 2.在Python3.5之前,dict中的元素是无序的,在python3.6版本以后可以认为dict是有序的
    # 但是一般而言,为了避免不必要的无界,一般需要有序dict时,会使用Ordereddict的字典,来确保有序
    d = {
        'Alice': 45,
        'Bob': 60,
        'Candy': 75,
        'David': 86,
        'Ellena': 49
    }
    print(d)
    d1 = collections.OrderedDict()
    d1['Alice'] = 45
    d1['Bob'] = 60
    d1['Candy'] = 75
    d1['David'] = 86
    d1['Ellena'] = 49
    print(d1)

    # 3.key不可变
    # 对于基础数据类型,字符串、数字等,这些都是不可变的,可以作为dict的key,
    # 而对于复杂数据类型,我们知道tuple是不可变的,list是可变的,
    # 因此tuple可以作为dict的key,但是list不可以作为dict的key,否则会报错
    key = (1,2,3) #以tuple作为key
    d[key] = True
    key = [1, 2, 3]
    try:
        d[key] = True
    except Exception as e:
        traceback.print_exc()
    print(d)
    # 4.遍历dict
    # 方法1
    print("方法1遍历d")
    for key in d:
        value = d[key]
        print(key, value)
    # 遍历 d1
    print("方法1遍历d1")
    for key in d1:
        value = d1[key]
        print(key, value)
    # 方法2
    print('方法2遍历d')
    for key, value in d.items():
        print(key, value)
    # 遍历 d1
    print('方法2遍历d1')
    for key,value in d1.items():
        print(key,value)


结果:
Traceback (most recent call last):
  File "D:/python/workspace/lixingren/test/demo76.py", line 34, in <module>
    d[key] = True
TypeError: unhashable type: 'list'
{'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}
OrderedDict([('Alice', 45), ('Bob', 60), ('Candy', 75), ('David', 86), ('Ellena', 49)])
{'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49, (1, 2, 3): True}
方法1遍历d
Alice 45
Bob 60
Candy 75
David 86
Ellena 49
(1, 2, 3) True
方法1遍历d1
Alice 45
Bob 60
Candy 75
David 86
Ellena 49
方法2遍历d
Alice 45
Bob 60
Candy 75
David 86
Ellena 49
(1, 2, 3) True
方法2遍历d1
Alice 45
Bob 60
Candy 75
David 86
Ellena 49

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值