Python字典

一.创建和使用字典

列表 元组
共同点:都是通过索引引用元素值
不同点:列表是可读写的,元组是只读的

names = ["Bill", "Mike", "John", "Mary"]
numbers = ["1234", "4321", "6789", "6543"]
print(numbers[names.index("Mike")])
print(names[numbers.index("6543")])
结果:
4321
Mary
# key和value
phoneBook = {"Bill":"1234","Mike":"4321","John":"6645","Mary":"7753"}
print(phoneBook)
print(phoneBook["Bill"])
结果:
{'Bill': '1234', 'Mike': '4321', 'John': '6645', 'Mary': '7753'}
1234

1.1.1 dict函数

items = [['Bill',"4321"],("Mike","7891"),['John','4567']]
d = dict(items)
print(d)
结果:
{'Bill': '4321', 'Mike': '7891', 'John': '4567'}

1、为dict函数传入一个列表类型参数值,列表的每一个元素(或者是一个列表,或者是一个元祖)包含两个值,第一个表示,第二个表示
2、dict函数通过关键字来创建字典

在这里插入代码片
dict1 = dict(name="Bill", number=6543, age=34)
print(dict1)
结果:
{'name': 'Bill', 'number': 6543, 'age': 34}

1.1.2字典的格式化字符串

# 用format_map方法格式化字符串
values1 = (1,2,'hello')
str1 = "abc %d   xyz, %d   %s world"
print(str1 % values1)
结果:
abc 1   xyz, 2   hello world

1.1.3 序列与迭代

1.获取字典中key的列表

dict={"x":1,"y":2,"z":3}
for key in dict:
    print(key,end=" ")
结果:x y z 

2.获取字典中key—value对的列表
如果要同时获取字典中的key和value,除了在上面的代码中使用dict[ ]获取值外,还可以使用字典中的items方法同时获取key和value。

dict={"x":1,"y":2,"z":3}
for key,value in dict.items():
    print(key,value)
结果:
x 1
y 2
z 3
dict={"x":1,"y":2,"z":3}
for key,value in dict.items():
    print(key,value,end=" ")
结果:x 1 y 2 z 3 

3.并行迭代
如果同时迭代两个或者多个序列,那么可以使用range函数获取序列索引的范围,然后使用for语句进行迭代。对多个序列进行迭代,一般要求序列中的元素个数相同。

names=["Bill","Mary","John"]
ages=[30,40,20]
for i in range(len(names)):
    print(names[i],ages[i])
结果:
Bill 30
Mary 40
John 20

4.压缩序列
这里的压缩序列是指使用zip函数将两个或者多个序列的对应元素作为一个元祖放到一起,进行压缩的两个或者多个序列的元素个数如果不相同,以元素个数最少的为准。

company=["百度","谷歌","小米"]
web=["https://www.baidu.com","https://www.google.com"]
for i in zip(company,web):
    print(i)
结果:
('百度', 'https://www.baidu.com')
('谷歌', 'https://www.google.com')

5.反转序列迭代
通过reversed函数将一个序列反转

company=reversed(["百度","谷歌","小米"])
print(company)
结果:<list_reverseiterator object at 0x0000000001D86550>
company=reversed(["百度","谷歌","小米"])
for i in company:
    print(i,end=" ")
结果:小米 谷歌 百度 

二.字典方法

2.1.1 clear方法

names1 = {"Bill":20, "Mike":30,"John":50}
names2 = names1
names1["Bill"] = 45
print(names2)
names1.clear()
print(names2)
结果:
{'Bill': 45, 'Mike': 30, 'John': 50}
{}

2.1.2 copy方法和deepcopy方法

浅拷贝(copy)
浅拷贝是对于一个对象的顶层拷贝----通俗的理解是:拷贝了引用,并没有拷贝内容
浅拷贝
其中,C语言是真正的复制对象中的内容
浅拷贝
浅拷贝
浅拷贝

import copy
a=[11,12]
b=[22,23]
c=[a,b]
print(c)      结果:[[11, 12], [22, 23]]

e=copy.copy(c)
print(id(c))  结果:165886536
print(id(e))  结果:31244488
print(e)      结果:[[11, 12], [22, 23]]

深拷贝
深拷贝是对于一个对象所有层次的拷贝(递归)
深拷贝进一步理解深拷贝

浅拷贝、深拷贝
拷贝的其他方式
分片表达式可以赋值一个序列
浅拷贝
字典的copy方法可以拷贝一个字典
字典拷贝
注意点:
浅拷贝对不可变类型和可变类型的copy不同
①copy.copy对于可变类型,会进行浅拷贝
②copy.copy对于不可变类型,不会拷贝,仅仅是指向

In [88]: a = [11,22,33]
In [89]: b = copy.copy(a)
In [90]: id(a)
Out[90]: 59275144
In [91]: id(b)
Out[91]: 59525600
In [92]: a.append(44)
In [93]: a
Out[93]: [11, 22, 33, 44]
In [94]: b
Out[94]: [11, 22, 33]
-----------------------------------------------------------
In [95]: a = (11,22,33)
In [96]: b = copy.copy(a)
In [97]: id(a)
Out[97]: 58890680
In [98]: id(b)
Out[98]: 58890680

在这里插入图片描述

2.1.3 fromkeys方法

fromkeys方法用于根据key建立新的字典(该方法的返回值就是新的字典)。在新的字典中,所有的key都有相同的默认值。在默认情况下,fromkeys方法会为每一个key指定None为其默认值。不过可以使用fromkeys方法的第2个参数设置新的默认值。

#在一个空字典上调用fromkeys方法创建一个新的字典(newdict),通过列表指定key
newdict1 = {}.fromkeys(['name','age','company'])
print(newdict1)
#输出结果:{'name': None, 'age': None, 'company': None}


#在newdict1上调用fromkeys方法创建一个新的字典(newdict2),通过元组指定key
newdict2 = newdict1.fromkeys(('name','age','company'))
print(newdict2)
#输出结果:{'name': None, 'age': None, 'company': None}


#通过fromkeys方法的第2个参数指定key的默认值,通过列表指定key
newdict3 = newdict1.fromkeys(['name','age','company'],'没有值')
print(newdict3)
#输出结果:{'name': '没有值', 'age': '没有值', 'company': '没有值'}

2.1.4 get( )方法

当使用dict[key]形式从字典获取value时,如果key在dict中不存在,那么程序会抛出异常。

dict = {"name":"Bill", "age":30}
print(dict["age"])
#dict['salary'] = 3000
print(dict['salary'])
结果:
Traceback (most recent call last):
  File "D:/pycharm/工程/网页爬虫/练习.py", line 5, in <module>
    print(dict['salary'])
KeyError: 'salary'

get()方法用于更宽松的访问字典项的方法。如果Key不存在,使用get()没有任何异常,仅仅返回None值.

dict = {"name":"Bill", "age":30}
print(dict["age"])
#dict['salary'] = 3000
print(dict.get('salary',3000))
结果:
30
3000

2.1.5 items( )方法和keys( )方法

items方法用于返回字典中所有key-value对。获得的每一个key-value对用一个元组表示。items方法返回的值是一个被称为字典视图的特殊类型,可以被用于迭代(如果用在for循环中)。items方法的返回值与字典使用了同样的值,也就是说,修改了字典或items方法的返回值,修改的结果就会反映在另一个方法上。keys方法用于返回字典中所有的key,返回值类型与items方法类似,可以用于迭代。
【2.1.4】本例演示了如何使用items方法获取字典中的key-value对,以及使用keys方法获取字典中所有的key,并通过for循环迭代items方法和keys方法的返回值。

#定义一个字典
dict = {'help':'帮助','bike':'自行车','banana':'香蕉','China':'中国'}

#在控制台输出字典中所有的key-value对
print(dict.items())

#通过for循环对dict中所有的值对进行迭代
for key_value in dict.items():
    print('key','=',key_value[0],'value','=',key_value[1])

#判断('bike','自行车')是否在items方法的返回值中
print(('bike','自行车') in dict.items())


#获取key-value对
dict_items = dict.items()
#修改字典中的值
dict['bike'] = '自行车;摩托车;电动车;'

#修改字典中的值后,dict_items中的值也会随着变化
print(dict_items)

#输出字典中所有的key
print(dict.keys())

#对字典中所有的key进行迭代
for key in dict.keys():
    print(key,end = ' ')

结果:

dict_items([('help', '帮助'), ('bike', '自行车'), ('banana', '香蕉'), ('China', '中国')])
key = help value = 帮助
key = bike value = 自行车
key = banana value = 香蕉
key = China value = 中国
True
dict_items([('help', '帮助'), ('bike', '自行车;摩托车;电动车;'), ('banana', '香蕉'), ('China', '中国')])
dict_keys(['help', 'bike', 'banana', 'China'])
help bike banana China 
Process finished with exit code 0

2.1.6 pop( )方法和popitem( )方法

pop方法与popitem方法都用于弹出字典中的元素。pop方法用于获取指定key的值,并从字典中弹出这个key-value对。popitem方法用于返回字典中最后一个key-value对,并弹出这个key-value对。对于字典来说,里面的元素并没有顺序的概念也没有append或类似的方法,所以这里所说的最后一个key-value对,也就是为字典添加key-value对时的顺序,最后一个添加的key-value对就是最后一个元素。

# pop方法,用于获取指定的key的值,并从字典中弹出这个key-value对
# popitem方法用于返回字典中最后一个key-value对,并弹出key-value对
d = {'c':10,'a':40,'b':12,'x':45}
d['1'] = 20
d['5'] = 100

print(d.pop('a'))
print(d)

for i in range(len(d)):
    print(d.popitem())

结果:

40
{'c': 10, 'b': 12, 'x': 45, '1': 20, '5': 100}
('5', 100)
('1', 20)
('x', 45)
('b', 12)
('c', 10)

2.1.7 setdefault()方法

setdefault方法用于设置key的默认值。该方法接收两个参数,第1个参数表示key,第2个参数表示默认值。如果key在字典中不存在,那么setdefault方法会向字典中添加这个key,并用第2个参数作为key的值。该方法会返回这个默认值。如果未指定第2个参数,那么key的默认值是None。如果字典中已经存在这个key,setdefault不会修改key原来的值,而且该方法会返回key原来的值。

d = {"name":"Bill", "age":30}
d['salary'] = 2000
d['age'] = 50

# None
print(d.setdefault("location","中国"))
print(d)
print(d.setdefault("location", "德国"))
print(d)

print(d.setdefault("abc"))
print(d)

结果:

中国
{'name': 'Bill', 'age': 50, 'salary': 2000, 'location': '中国'}
中国
{'name': 'Bill', 'age': 50, 'salary': 2000, 'location': '中国'}
None
{'name': 'Bill', 'age': 50, 'salary': 2000, 'location': '中国', 'abc': None}

2.1.8 update( )方法

1.用一个字典中的key-value对更新另外一个字典,该方法接收一个参数
2.该参数表示用作更新数据的字典数据源。
3.dict1.update(dict2),dict2中的元素更新dict1。

d1 = {
    'title':'美好',
    'website':'小米',
    'description':'手机'
}

d2 = {
    'title':'百度',
    'products':['贴吧','博客','读书频道','百度文库'],
    'description':'搜索'
    }
d1.update(d2)
print(d1)

结果:

{'title': '百度', 'website': '小米', 'description': '搜索', 'products': ['贴吧', '博客', '读书频道', '百度文库']}

2.1.9 values( ) 方法

values方法用于以迭代器形式返回字典中值的列表。与keys方法不同的是,values方法返回的值的列表可以有重复。而keys方法返回的键值列表不会有重复的key。

d = {
    'a':1,
    'b':2,
    'c':2,
    'd':4,
    'e':1,
}
print(d.values())
#对值列表进行迭代
for value in d.values():
    print(value)

结果:

dict_values([1, 2, 2, 4, 1])
1
2
2
4
1
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少云清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值