python学习10字典

字典(Dict)是python语言的一个最大的特征
1.定义:是可变的无序集合,以键值对为基本元素,可以存储各种数据类型
2.表示:{} ,列表:[ ] ,元组 (),字符串 ‘’ “” ‘‘‘ ’’’
3.元素之间用逗号(,)分割
4.键值对:{键:对} 键:Key 对:Value -----》 字典属于一对一映射关系的数据类型
5.字典的基本格式
d1={}
print(len(d1)) #空字典 len()获取字典元素个数


6.字典的键值设置要求
(1)一个字典对象里面所有的键必须唯一

d2={1:'car',2:'bus',2:'train'}
print(d2)

输出:
{1: 'car', 2: 'train'}
说明:当键重复时,只会输出一个,也就是最后的那个

(2)不能对元素的键进行直接修改

d3={'Alan':22,'Tom':23,'Mike':35}
print(d3)
d3['Alan']=21
print(d3)

输出:

{'Alan': 22, 'Tom': 23, 'Mike': 35}
{'Alan': 21, 'Tom': 23, 'Mike': 35}
不能对元素的键进行直接修改,但是我们可以通过下标这种方式修改:字典名[键]=值如果字典中没有通过这个下标法设置的键,那么就会在这个字典中新增一个键值对,如果有,就修改对应键的值


(3)值可以是Python支持的任何对象

7.字典的基本方法
(1)字典元素的增加
  1.下标法赋值:上述已经说过了,这里不再赘述
  2.setdefault()方法:使用格式是D.setdefault(k[,d]) 若指定键已经存在,则不会修改键对应的值,而是直接显示已经存在键的值。

d4={'Alan':22,'Tom':23,'Mike':35}
d4.setdefault('Alice',10)
print(d4)
d4.setdefault('Alan',24)
print(d4)

(2)字典值查找
  1.通过指定键来查找

print(d4['Alan'])

输出:22


  2.get()方法:使用格式是D.get(k[,d])

print(d4.get('Alan'))

(3)字典值修改
  1.下标法赋值:上述也已经说过了,这里不再赘述
  2.update()方法:使用格式是D.update(D')

d5={'Alan':22,'Tom':23,'Mike':24}
d6={'Alan':32,'Mike':34}
d5.update(d6) #调用update()方法用d6更新d5
print(d5) #{'Alan': 32, 'Tom': 23, 'Mike': 34}

d5.update({'Alice':20}) #也可以通过这种方法增加一个键值对
print(d5)

(4)元素删除
  1.del

  2.pop():使用格式是D.pop(k[,d])

  3.popitem():使用格式是D.popitem()
Notes:popitem()不能加参数;这个方法是随机删除;会返回一个键值对元组;并在字典里删除对应的元素

del(d5['Alice'])
print(d5)
d5.pop('Alan')
print(d5)
(k1,v1)=d5.popitem()
print((k1,v1))
print(d5)

输出:

{'Alan': 32, 'Tom': 23, 'Mike': 34}
{'Tom': 23, 'Mike': 34}
('Mike', 34)
{'Tom': 23}


(5)字典遍历
  1.items()方法遍历所有键值对:使用格式是D.items()
  2.keys()方法获取键:使用格式是D.keys()

for get_L in d4.items():
print(get_L)

结果为:
('Alan', 22)
('Tom', 23)
('Mike', 35)
('Alice', 10)

for gets in d4:
print(gets)#遍历所有键

结果为:
Alan
Tom
Mike
Alice

等价于

for gets1 in d4.keys():
print(gets1)


结果为:
Alan
Tom
Mike
Alice

  3.通过键遍历值

for get_key in d4:
print(d4[get_key])

输出:

22
23
35
10
思想为遍历出键,用下标法根据键遍历出值

  4.values()方法:获取字典值:使用格式是D.values()

for get_value in d4.values():
print(get_value)

22
23
35
10

(6)其他操作方法
  1.in成员操作

d6={1:'a',2:'b',3:'c',4:'d'}
if 1 in d6.keys():
print('yes')
else:
print('no')

  2.clear():D.clear():删除字典变量D中的所有元素

d7={1:'w',2:'l',3:'lm'}
print(d7)
d7.clear()
print(d7)

输出:

{1: 'w', 2: 'l', 3: 'lm'}
{}

  3.copy()方法:D.copy():深度复制,复制后产生的两个字典变量完全没有关系,互不影响。

d7=d6.copy()
print(d7)
print(id(d6))
print(id(d7))

把d6的内容赋值给d7;id()方法是获取字典在内存中的地址;
结果为
2660611726144
2660611727080
发现地址不一样,则说明通过copy()方法复制的两个字典变量,二者虽然内容相同,但指向不同的地址

d8=d7
print(id(d7))
print(id(d8))

通过上述方法赋值,结果为
1379303300912
1379303300912
说明这种赋值方法,二者将指向同一地址

  4.fromkeys():D.fromkeys(列表):指定相应键生成空值字典

d9={}.fromkeys(['paper','pen','pencil'])
print(d9)

输出:
{'paper': None, 'pen': None, 'pencil': None}

8.字典嵌套
(1)字典嵌入字典

我们看个例子,假设饭店里1号桌有张三在这里消费了100元,李四消费了200元......2号桌阿猫消费了1000元......我们可以通过下面的字典嵌套进行记录。

no1={'张三':100,'李四':200,'王五':500}
no2={'阿猫':1000,'阿狗':2500}
no3={'wang':2000,'liu':1000,'xiaowang':500}
records={'1号':no3,'2号':no2,'3号':no1}
print(records)

{'1号': {'wang': 2000, 'liu': 1000, 'xiaowang': 500}, '2号': {'阿猫': 1000, '阿狗': 2500}, '3号': {'张三': 100, '李四': 200, '王五': 500}}

还可以对上述所有消费金额求和,统计该天的总收入金额。

total=0
for get_values in records.values():
print(get_values.values())
total+=sum(get_values.values())
print(total)

(2)列表嵌入字典

如果我们不去记录每桌的客人姓名是谁,只记录每桌消费金额,就可以利用列表进行

l1=[100,200,500]
l2=[1000,2500]
l3=[2000,1000,500]
record={'1号':l3,'2号':l2,'3号':l1}
print(record)
total1=0
for i in record.values():
total1+=sum(i)
print(total1)

{'1号': [2000, 1000, 500], '2号': [1000, 2500], '3号': [100, 200, 500]}
7800

(3)字典嵌入列表

no1={'张三':100,'李四':200,'王五':500}
no2={'阿猫':1000,'阿狗':2500}
no3={'wang':2000,'liu':1000,'xiaowang':500}
records1=[no3,no1,no2]
print(records1)
total2=0
for i in range(len(records1)):
total2+=sum(records1[i].values())
print(total2)

输出:

[{'wang': 2000, 'liu': 1000, 'xiaowang': 500}, {'张三': 100, '李四': 200, '王五': 500}, {'阿猫': 1000, '阿狗': 2500}]
7800

posted @ 2020-02-14 19:07  程序员王不错  阅读(187)  评论(0)    收藏  举报