字典简介、操作、内置函数、练习题

字典

定义:

  1、字典是一种可变的容器,可以存储任何类型的数据

  2、字典中的每个数据都是用‘键key’进行索引的,而不像序列(str list tuple)可以用整数进行索引

  3、字典的存储是无序的

  4、字典中的数据是以键key - 值 value 对(key_value对)形式形式存储

  5、字典的键不能重复,且只能用不可变类型做字典的键

二、创建字典的字面值方式

  字典表示方式,用{}括起来,以冒号(:)分割键值对,各个键值对之间用逗号分开

  1、创建空字典

    d={}

  2、创建字典的构造函数

    dict{}  #生成一个空的字典,等同于 {}

    dict(iterable) #通过可迭代对象穿件一个字典

    dict(**kwargs)  #关键字传参的形式生成一个字典

    注意:字典的键必须为不可变类型的值

    可变的类型有 list()列表  dict()字典 set()集合

三、字典的基本操作

  1、字典的索引

    语法:字典[键]

    作用:用来获取字典所对应的值

  2、字典的赋值

    语法:

      字典[键] = 值

    说明:键不存在时就创建并赋值、键存在则修改

  3、字典的删除

    del语句语法:

      del  dict['键']

  4、键判断键值或者键是否在字典中

     in  和 not in 运算符

    可以用in判断一个键是否存在于字典中,如果存在返回True ,不存在就返回False。not in 相反

    语法 :‘键’   in  dict   或者 ‘键’  not in dict 

练习:写程序,实现以下功能:

    1、将如下数据形成一个字典d

     键     1                   2                    3                    4

     值   春季 有123月           夏季有456月             秋季有789月                        冬季有 101112月

    2让用户输入一个整数代表这个季节,打印这个季节对应信息,如果用户输入的信息不存在字典内,则提示用户‘信息不存在’ d={}d['1'] = '春季有1,2,3月'

d['2'] = '夏季有4,5,6月'
d['3'] = '秋季有7,8,9月'
d['4'] = '冬季有10,11,12月'
print(d)
intnum = int(input('请输入一个整数'))
if intnum == 1:
    print(d['1'])
elif intnum == 2:
    print(d['2'])
elif intnum == 3:
    print(d['3'])
elif intnum == 4:
    print(d['4'])
else:
    print('信息不存在')


'''

seasons = {
1:'春季有123月',
2:'夏季有456月',
3:'秋季',
4:'冬季',

}

'''

  

d={}
d['1'] = '春季有1,2,3月'
d['2'] = '夏季有4,5,6月'
d['3'] = '秋季有7,8,9月'
d['4'] = '冬季有10,11,12月'
print(d)
intnum = input('请输入一个整数')
if intnum.isdigit():     #判断是否是整数机制
    i=int(intnum)
    if i == 1:
        print(d['1'])
    elif i == 2:
        print(d['2'])
    elif i == 3:
        print(d['3'])
    elif i == 4:
        print(d['4'])
    else:
        print('信息不存在')
else:
    print('您输入的信息不符合规范')

  

#其实这个判断机制更巴适
if
intnum in d: print(d[intnum]) else: print('信息不存在')
intnum = input('请输入一个整数')
if intnum.isdigit():  #判断这个输入的字符串里面的东西是不是数字
    i=int(intnum)   #转换为int型
    if i in d:            #判断i是否在里面    
         print(d[i])
    else:
        print('信息不存在')
else:
    print('您输入的不是数字')
#最终,这个程序是不成功的,因为key 键,‘1’或者‘2’,它是字符串‘1’  不是int‘1’ 当我们将i转化为int的时候
# 然后int 型的i 在key(key是字符串)中判断是否存在,当然是不存在。int 型的 1 和str型的 1 无法匹配比较


  

 四、字典的迭代对象

   字典是可迭代对象,只能对键进行访问

   for key ,value in dict.items(d):

     print(key,value)

五、练习:输入一个字符串,打印这个字符串中出现过的字符和出现过的次数

      如:输入abcabcabca

        打印如下:

         a:2次

         b:3次

         c :6次

      注,不要求打印顺序

Str1 = input('输入一些字符串')
Dict1 = {}
for key in Str1:
    if key in Dict1:
        Dict1[key] = Dict1[key] + 1
    else:
        Dict1[key] = 1
for keykey,value in dict.items(Dict1):
    print(keykey,':',value,'次')
print(Dict1)

#运行结果

输入一些字符串abaababcccgggggg6672636777
a : 4 次
b : 3 次
c : 3 次
g : 6 次
6 : 4 次
7 : 4 次
2 : 1 次
3 : 1 次
{'a': 4, 'b': 3, 'c': 3, 'g': 6, '6': 4, '7': 4, '2': 1, '3': 1}

  

   六、可以用于字典的函数

  len(x) max(x) min(x) sun(x) any(x)

七、字典的内置方法
1、dict.clear()
    删除字典中所有元素
    这个方法没有参数,没有返回值
 2、dict.from(seq[,vslue])
    创建一个新的字典,以序列seq(seqs是一个tuple) 比如 seq = ('张三','李五','王二')中元素作为字典的键,value作为所有键对应的初始值
  参数: seq --字典键值列表
      value -- 可选参数,序列seq的值

   返回值:

      返回一个新的列表

  3、dict.get(key,default = None)

   返回指定键的值,如果指定键不在,则返回默认值。

        

  4、dict.items()

    以列表返回可遍历的(键, 值) 元组数组

  5、dict.keys()

   返回一个迭代器,可以使用 list() 来转换为列表。(以列表返回字典所有键)没有参数,返回一个字典所有键

  6、dict.update(dict2)

    把字典dict2的键/值对更新到dict里(相当于把dict2中的数据追加到dict1中)

  参数:dict2

  没有返回值

  7、dict.values()

    没有参数

    以列表返回字典中所有值

  8、pop(key.[,default])

    删除字典给定键所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值

    参数:

      key:要删除的键值

      default:如果没有key,返回default值

    返回值:

      返回被删除的值

  9、popitem()

    随机返回并删除字典中的一对键和值

    没有参数

    返回值

    返回一个键值对(key,value)形式

八、字典和列表比较

   1、都是可变的容器

   2、索引方式不同,列表用整数索引,字典用键索引

   3、列表的储存是有序的,字典的储存是无序的

   4、字典插入删除修改速度快于列表(重点)

练习:

  任意输入很多学生的姓名,成绩,年龄。每个学生信息存入字典中,然后再放入列表内

  每个学生信息需要手动输入:

      设计到深复制和浅复制的问题:看这儿 

  如:

    请输入姓名:tehs

    请输入年龄:15

    请输入成绩:99

    请输入姓名:tffs

    请输入年龄:asaa

    请输入成绩:1000

    请输入姓名:<回车> #结束输入

   内部存储格式如下:

    infors = [{'name':'tehs','age':18,'score':99},{'name':'china','age':66,'score':98  }

      1、打印以上列表:

    2、按一下下表格打印学生信息

    +-----------+---------+--------+

     姓名        年龄     成绩

Student = {}
infors = []
List = []
num = 0
while num <= 1:

        student_name = input('请输入学生姓名:')
        Student['name'] = student_name
        student_age = input('请输入学生年龄')
        Student['age'] = student_age
        student_score = input('请输入学生成绩')
        Student['score'] = student_score
        infors.append(Student.copy()) #使用一哈浅拷贝 如果不用copy,两个infors两个元素都会被覆盖成一个元素
        num += 1
print('循环退出')

print('+------  +---------+---------+')
print('| 姓名   |  年龄    |   成绩  | ')
print('+--------+---------+---------+')
for value1 in infors[0].values():
    print('|  ',value1,'  ',end = '')
print('|
+--------+---------+---------+')
for value2 in infors[1].values():
    print('|  ',value2,'  ',end = '')
print('|
+--------+---------+---------+')

  运行结果:

请输入学生姓名:小强
请输入学生年龄44
请输入学生成绩100
请输入学生姓名:王小
请输入学生年龄66
请输入学生成绩106
循环退出
+------  +---------+---------+
| 姓名   |  年龄    |   成绩  | 
+--------+---------+---------+
|   小强   |   44   |   100   |
+--------+---------+---------+
|   王小   |   66   |   106   |
+--------+---------+---------+

Process finished with exit code 0

打印名片管理系统:

要求:1、添加一个名片

   2、删除一个名片

   3、修改一个名片

   4、查询一个名片

      5、显示所有名片

   6、退出系统

  提示:card_infors = [{'name':'xx','qq':'xxx','wexin':'xxx',addr:'xxx'},

{'name':'xx','qq':'xxx','wexin':'xxx',addr:'xxx'},

{'name':'xx','qq':'xxx','wexin':'xxx',addr:'xxx'},

....

]

print("welcome Card System")

Card_infors=[] #用列表来存储名片
print('1、添加新名片,2、删除一个名片,3、修改一个名片,4、查询一个名片,5、显示所有名片,6退出')
while True:
    Card = {}
    FunctionChoose = input("选择操作序号:
")
    #获取用户输入,根据数据执行相应功能
    if FunctionChoose == '6':
        break
        print("退出系统")

    elif FunctionChoose == '1':
        Card["name"] = input("输入添加卡片名:")
        Card["qq"] = input("输入QQ号:")
        Card["weixin"] = input("输入微信号:")
        Card["addr"] = input("输入地址:")
        Card_infors.append(Card)
        print('添加成功!')

    elif FunctionChoose == '2':
        print(Card_infors,"这是所有的名片,请输入被删除名片的名字")
        name = input()
        find_flag = 0
        for temp in Card_infors:
            if temp['name'] == name:
                print()
                del Card_infors[Card_infors.index(temp)]
                find_flag = 1
                print("删除成功!")
                break
        if find_flag == 0:
            print("删无此人")


    elif FunctionChoose == '3':
         print('选择你要修改的那个人名片的名字')
         xgname = input()
         find_flag = 0
         for temp in Card_infors:
             if temp['name'] == xgname:
                 Card["name"] = input("输入修改的卡片名:")
                 Card["qq"] = input("输入修改的QQ号:")
                 Card["weixin"] = input("输入修改的微信号:")
                 Card["addr"] = input("输入修改的地址:")

                 Card_infors[Card_infors.index(temp)]=Card
                 print("修改成功!")
                 find_flag = 1
         if find_flag == 0:
              print("修无此人")
    elif FunctionChoose == '4':
        name = input("输入你要查询的人的名字")
        find_flag = 0
        print("姓名	qq	微信	地址")
        for temp in Card_infors:
            if temp["name"] == name:
                print(temp['name'],' ',temp['qq'],' ',temp['weixin'],'  ',temp['addr'])
                find_flag =1

        if find_flag == 0:
            print("查无此人")
    elif FunctionChoose == '5':
        print('所有的信息',Card_infors)
    else:
        pass

  

原文地址:https://www.cnblogs.com/followlqc/p/11058007.html