python基础知识(三)字典、字符串

十一、字典

说字典前,得说两种数据类型。可变和不可变。

不可变类型:数字、字符串、元组;

可变类型:列表,字典。

1.字典的每个键值“key=>value”用冒号“:”分割,每个对之间用逗号(,)分割,整个字典包括在花括号‘{ }’中。

两大特点:无序,键唯一

格式:dict = {key1: value1, key2: value2}

key(键)必须是唯一的,即不可变的类型:字符串、数字、元组;

value(值)可以取任何数据类型。

键值对:
“key1: value1”称为一对键值对,

相当于函数中的映射关系:一个x只能对应一个y,一个y可以对应多个x。

  在列表中,找值是通过索引值来进行的;

  而在字典中,找值就通过键来进行。

2.字典的创建:

  如上面格式。

这里讲一下多层嵌套字典的创建

dict = {

  key1:

    {key2:

      {key3:value},

    },

  }

这是一个三层嵌套的字典。上面也说了,key(键)必须是不可变类型的数据。

eg:

 下面作业代码里的字典创建。

3.为方便我们下面对字典进行操作,先创建一个字典:

dict = {'name' :'dejian','age' = '30','hobby' = 'play_games'}

1)查操作

①通过键名去查找:

a = dict['name']

print(a)

>> dejian

②用keys()方法;

print(dict.keys())

print(list(dict.keys()))

>>dict_keys(['name', 'age', 'hobby'])

    ['name', 'age', 'hobby']

第一行把字典里所有的键拿出来,但出来的类型不是列表

第二行,将该类型转化为列表

③values():同上,取得是值;

④items():同上,取得是键值对。

2)增加:

直接添加,给定键值对

eg:

dict['id'] = 'student'

print(dict)

>> {'name' :'dejian','age' : '30','hobby' : 'play_games','id' : 'student'  }

字典里就多了一对键值对 'id':'student'

如果给定的键值对存在,就修改该键值对的值。

②用方法setdefault()

print(dict.setdefault('name','qianchen'))#键'name'在字典中,不创建键值对,返回值为该键对应的值
print(dict.setdefault('name1','qianchen'))#'name1'不在字典里,创建新的键值对,返回值是这个键对应的值
print(dict)

>>dejian

    qianchen

    {'name': 'dejian', 'age': '30', 'hobby': 'play_games', 'name1': 'qianchen'}3

3)修改:

①通过键名,同2)增加中的①,就是键本来存在,就修改键对应的值。

②用update()方法

类似于列表中的extend()方法

如果存在该键值对的话,就覆盖掉,

       不存在的话,就追加进字典里。

4)删除:

del dict

>> 删除整个字典

del dict['name']

>> 删除键'name'对应的键值对

clear()方法

>> 清空字典里的键值对

pop()方法

>> 括号里加的是键,通过键值删掉键值对,然后键对应的值作为返回值返回;

  和列表里的区别:列表通过索引值来删除

④popitem()

>> 随机删除某组键值对,并以元组方式返回值

5)其他操作:

①formkeys()

>> 创建一个新字典

②copy()

>> 学完深浅copy再回来,上面也是

6)排序

sorted()方法

>> 对键进行排序

sorted(dict.values)

>> 对值进行排序

7) 遍历

for i in dict:      (推荐使用)
  print(i)

>> 

name
age
hobby

得到的是字典里的键

②for i in dict:

  print(i,dict[i])

>> 打印的是键 值

③for i in dict.items():

  print(i)

>> 输出的类型 是  元 组(有括号)

④for i,v in dict.items():

  print(i,v)

>> 输出内容的就不会出现括号了


 

十二、字符串

1.双引号和单引号没有区别

2.*n,打印n行

eg:

str = "I'm Dejian."
print(str)
print(str*9)

>>

I'm Dejian.
I'm Dejian.I'm Dejian.I'm Dejian.I'm Dejian.I'm Dejian.I'm Dejian.I'm Dejian.I'm Dejian.I'm Dejian.

第二个打印出9次str

3.通过索引

4.判断在不在字符串:用 in

print('ji' in str)

>> True

5.格式化输出

>> 没有写死,更加灵活

6.字符串拼接

1.c = a + b

效率低,要不断开辟变量

2.join()方法

c= ''.join([a,b])

>> 将ab拼接在一起,如果''里面有内容,则夹在ab间

eg:d = '*'.join([a,b,c])

    print(d)

>> a*b*c

7.重要的字符串的内置方法

1)count()   统计元素个数

2)capitalize()   首字母大写

3)center(a,'b')   居中,左右两边用b打印

4)startswith()   判断是否以某个内容开头

  可作为文件处理的判断标志

5)find()   查找到第一个元素,并将索引值返回

6)format()  格式化输出 参数以赋值

7)lower()   大写变小写

8)upper()   小写变大写

9) strip()   把头和尾的空格、换行符去掉

10)split('a',b)   分割

把字符串 变成 列表
    以a为准,分割b次
反之用 join()

11) replace('a','b')   把a用b取代掉,所有的a

  

str = '1234abcd////   '
print(str.isdigit())  #判断字符串是不是数字
print(str.isspace())  #空格
print(str.isalpha())  #字母,中文也包含在字母中


应用:如果要打印出字符串中的数字,空格,字母和其他字符的个数,就可以使用,

str = '1234abcd////   '
shuzi = 0
zimu = 0
kongge = 0
qita = 0
for i in str:
  if i.isdight:
    shuzi += 1

依此类推,得出各种类型的数字




 

作业:多级菜单程序:

python基础知识(三)字典、字符串_第1张图片

代码如下:

menu = {
'广东':{
'广州':{
'越秀区':{'东湖','白云','大东'},
'白云区':{'三元里','同和','永平'},
'天河区':{'沙东','沙河','黄村'},
},
'深圳':{
'南山区':{'西丽','沙河','水湾'},
'福田区':{'福田','梅林','华强北'},
'龙岗区':{'龙岗','龙城','横岗'},
},
'汕头':{
'潮南区':{'陈店','两英','司马浦'},
'龙湖区':{'珠池','新津','金霞'},
'濠江区':{'河浦','玉新','达濠'}
},
},
'浙江':{
'杭州':{
'上城区':{'湖滨','清波','望江'},
'临安区':{'青山湖','锦城','玲珑'},
'西湖区':{'北山','灵隐','文新'},
},
'宁波':{
'镇海区':{'庄市','骆驼','蛟川'},
'北仑区':{'春晓','梅山','郭巨'},
'奉化区':{'锦屏','江口','尚田'},
},
'温州':{
'龙湾区':{'永中','海城','沙城'},
'鹿城区':{'五马','滨江','七都'},
'洞头区':{'东屏','灵昆','元觉'}
},
},
'安徽':{
'合肥':{
'蜀山区':{'西园','稻香村','南七'},
'瑶海区':{'三里街','明光路','和平路'},
'庐阳区':{'十字街','新华街','中山街'},
},
'安庆':{
'迎江区':{'龙狮桥乡','长风乡','青龙'},
'大观区':{'德宽路','菱湖','集贤路'},
},
'淮北':{
'相山区':{'东山','相南','三堤口'},
'烈山区':{'杨庄','任楼','古饶'},
'杜集区':{'高岳','朔里','石台'}
},
},
}
current_dict = menu
condition1 = True
condition2 = True

while condition1 and condition2:
for key in current_dict:
print(key)
choice = input('请输入您想进入的地方:').strip()
if choice in current_dict:
while condition1 and condition2:
for key2 in current_dict[choice]:
print(key2)
choice2 = input('您已进入%s,请输入您想进入的地方:'%choice).strip()
if choice2 in current_dict[choice]:
while condition1 and condition2:
for key3 in current_dict[choice][choice2]:
print(key3)
choice3 = input('您已进入%s,请输入您想进入的地方:'%choice2).strip()
if choice3 in current_dict[choice][choice2]:
while condition1 and condition2:
for key4 in current_dict[choice][choice2][choice3]:
print(key4)
choice4 = input('您已进入%s,请输入您想进入的地方:'%choice2).strip()
if choice4 in current_dict[choice][choice2][choice3]:
print('恭喜您已成功进入%s,程序退出,谢谢使用。'%choice4)
condition1 = False
elif choice4 == 'q':
print('程序已退出,谢谢使用。')
condition1 = False
elif choice4 == 'r':
condition2 = False
else:
condition2 = True
elif choice3 == 'q':
print('程序已退出,谢谢使用。')
condition1 = False
elif choice3 == 'r':
condition2 = False
else:
condition2 = True
elif choice2 == 'q':
print('程序已退出,谢谢使用。')
condition1 = False
elif choice2 == 'r':
condition2 = False
else:
condition2 = True
elif choice == 'q':
print('程序已退出,谢谢使用。')
condition1 = False



 

代码一的效果图如下:

python基础知识(三)字典、字符串_第2张图片python基础知识(三)字典、字符串_第3张图片

 

这是一个可以完成该要求的代码,但是这样的代码太lower了,因此需要对其进行重构,减少代码的重复使用。

根据目前所学知识,以下代码可是相当的优秀,实现这个功能。


 

最最最行的参考代码:

  明天再补上了,现在想自己在做一遍,看看能不能回想起来。

 

你可能感兴趣的:(python基础知识(三)字典、字符串)