Dict 字典

Dict 字典

dict全称dictionary,在其他语言中也称为map,字典是另 一种可变容器模型,且可存储任意类型对象。具有极快的查找速度。

1. 创建字典

基本格式:d = {key1 : value1, key2 : value2 }

value: 我们要存储的数据

key: 找到数据的钥匙

# 创建一个空字典
dict0 = {}
print(dict0)

# 向空字典中加值
dict0['name'] = 'zhangsan'
print(dict0)
dict0['age'] = 18
print(dict0)
dict0.setdefault("Sex")
print(dict0)
dict0.setdefault("desciption", "nice girl")
print(dict0)

# 创建一个有数据得字典
dict1 = {"name": "zhangsan", "age": 18, "sex": "女", "desciption": "nice girl"}
print(dict1)

# 创建字典需要注意以下两点
# 1. 键唯一,多次出现会记住最后一个值, 前面得被覆盖
dict2 = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni', 'Name': 'Zhangsan'}
print(dict2)
print(dict2['Name'])

# 2. 键不可变,所以可以用数,字符串或元组充当,列表不行
# (1) 数字key
dic3 = {1: "a", 2: "b"}
print(dic3)
print(dic3[1])

# (2) 元组key
dic4 = {(1,2): "a", (3,4): "b"}
print(dic4)
print(dic4[(1,2)])

# (3) 列表key
dic5 = {['Name']: 'Zara', 'Age': 7}
print(dic5)   # TypeError: unhashable type: 'list'

2. 访问字典

dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

# 方法一: []
name = dict1['Name']
age = dict1['Age']

print("学生姓名: {}, 学生年龄:{}".format(name, age))

# 取不存在的key
#sex = dict1['Sex']  # KeyError: 'sex'

# 方法二:get
name = dict1.get('Name')
age = dict1.get("Age")
print("学生姓名: {}, 学生年龄:{}".format(name, age))
# 取不存在的key,
sex = dict1.get("Sex")
print(sex)
# 设置取不存在key的默认值
sex = dict1.get("Sex", "未知")
print(sex)
print("学生姓名: {}, 学生年龄:{}, 学生性别:{}".format(name, age, sex))

3. 修改字典

dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

# 给Name的key重新赋值
dict1['Name'] = "Zhangsan"
print(dict1)

4. 删除字典

dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

# del 根据key删除
del dict1['Name']
print(dict1)

# pop方法删除
dict1.pop('Age')
print(dict1)

# clear方法清空字典
dict1.clear()
print(dict1)

# del 删除整个字典
del dict1
print(dict1)   # NameError: name 'dict1' is not defined

5. 字典常用函数

  • len(dict):计算字典元素个数,即键的总数
    dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
    print(len(dict1))
    
    dict2 = {'Name': 'Zara', 'Age': 7, 'Class': ''}
    print(len(dict2))
    
  • str(dict):输出字典可打印的字符串表示。
    dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
    str2 = str(dict1)
    print(str2)
    print(type(str2))
    
  • enumerate(dict) 枚举字典元素,返回枚举对象,其中每个元素为包含下标和值的元组
    dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
    for index, key in enumerate(dict1):
        print("index: {}".format(index))
        print("key: {}".format(key))
    

6. 字典常用方法

  • copy():返回一个字典复制
    dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
    dict2 = dict1.copy()
    print(dict1)
    print(dict2)
    
    dict2['Name'] = "Zhangsan"
    print(dict1)
    print(dict2)
    
    dict3 = {'Name': 'Zara', 'Age': 7, 'Class': 'First', 'score': [1,2,3,4]}
    dict4 = dict3.copy()
    dict4['score'] = [5,6,7,8]
    print(dict3)
    print(dict4)
    
  • fromkeys():创建一个新字典,以序列中元素做字典的键,val为字典所有键对应的初始值
    new_d = ('Year', 'Month', 'Day')
    dict1 = dict.fromkeys(new_d)
    print("新的字典 : %s" % str(dict1))
     
    dict1 = dict.fromkeys(new_d, 8)
    print("新的字典 : %s" % str(dict1))
    
    >> {'Year': None, 'Month': None, 'Day': None}
    >> {'Year': 8, 'Month': 8, 'Day': 8}
    
  • items():以列表返回可遍历的(键, 值) 元组数组
    dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
    for k, v in dict1.items(): # 用items方法 k接收key ,v接收value
        print(k, v)
    
  • keys():以列表返回一个字典所有的键
    dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
    for k in dict1.keys(): # 循环所有的values
        print(k)
    
  • values():以列表返回字典中的所有值
    dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
    for v in dict1.values(): # 循环所有的values
        print(v)
    
  • update(dict2):把字典dict2的键/值对更新到dict里
    dict1 = {'Year': 2018, 'Month': 3, 'Day': 18}
    
    # 第一种写法
    dict1.update({'Year': 2019, 'Day': 20, 'Hour': 10})
    
    # 第二种写法
    dict1.update(Year=2019, Day=20, Hour=10)
    
    # 已存在的key就覆盖,不存在的key就添加进字典
    print(dict1)
    
    >> {'Year': 2019, 'Month': 3, 'Day': 20, 'Hour': 10}   
    
    

7. 字典排序

dict1={'a':2,'e':3,'f':8,'d':4}

# sorted()默认是对字典的键,从小到大进行排序
dict2 = sorted(dict1)
print(dict2)
>> ['a', 'd', 'e', 'f']

# 对键进行反向(从大到小)排序
dict2 = sorted(dict1,reverse=True)
print(dict2)
>> ['f', 'e', 'd', 'a']

# 先拿到所有的key,然后再对key排序
list1= sorted(dict1.keys(),reverse=True)
print(list1)
>> ['f', 'e', 'd', 'a']

# 对值排序 / 设值reverse=True 进行反向排序
list1= sorted(dict1.values())
print(list1)
>> [2, 3, 4, 8]

# 用dict1.items(),得到包含键,值的元组
# 对排序的规则进行了定义,x指元组,x[1]是值,x[0]是键

# 根据键进行排序
list1= sorted(dict1.items(),key=lambda x:x[0])
print(list1)

# 根据值进行排序
list1= sorted(dict1.items(),key=lambda x:x[1])
print(list1)

练习

  1. 把学生成绩名单(字典格式) 根据给定范围规则,输出学生是否及格,超出范围输出成绩不合法

    规则范围:0 ~ 59:不及格,60 ~ 79:及格,80~100:优秀

    示例:

    student_score = {“张三” : 13, “李四”: 70}

    输出: {“张三” : ”不及格“, “李四”: ”及格“}

    student_score = {"小红": 60, "小绿": 79, "小黄": 23, "小蓝": 99, "小花": 10}
    
    student_dict = {}
    for name, score in student_score.items():
        if score >= 0 and score <= 59:
            result = "不及格"
        elif score >= 60 and score <= 79:
            result = "及格"
        elif score >= 80 and score <= 100:
            result = "优秀"
        else:
            result = "成绩不合法"
    
        student_dict[name] = result
    
    print(student_dict)
    
  2. 统计句子中重复的单词

    题目要求:

    • 重复的单词: 此处认为单词之间以空格为分隔符:

    • 用户输入一句英文句子;

    • 打印出每个单词及其重复的次数;

    示例:

    输入: “hello java hello python”
    输出:
    hello 2
    java 1
    python 1

    language = input('请输入一句英文:')
    
    #先按照空格分离字符串,成为列表
    languages = language.split(' ')
    #设置一个新的字典
    words = {}
    #遍历列表
    for word in languages:
        # 统计次数
        count = languages.count(word)
        words[word] = count			
        #key=单词,value=重复的次数,添加到字典中,字典中如果key值存在则更新value值,所以生成的字典中key不会重复。
        
    #遍历打印字典
    for word, count in words.items():
        print('%s\t\t%s' %(word, count))
    
    
  3. 随机生成银行卡号

    题目要求:

    随机生成100个卡号;
    卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100),
    生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
    输出卡号和密码信息, 格式如下:
    卡号 密码
    6102009001 000000

    提示:fromkeys()

    #创建一个空列表
    card_ids = []
    card_start = "6102009"
    #要求生成100个卡号所以循环100次
    for i in range(100):
        #指定前几位为6102009 后三位依次加1
        s = card_start + str(i+1)
        #添加元素
        card_ids.append(s)
    card_ids_dict = dict.fromkeys(card_ids,'redhat')
    
    #将刚才生成的cards_ids作为key, value全为redhat
    print('卡号\t\t\t\t\t密码')
    #遍历字典
    for card_id, password in card_ids_dict.items():
        print('%s\t\t\t%s' %(card_id,password))
    
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值