Python学习笔记(5)-dict和set

简单的字典

字典,类似java中Map,数据都是键-值对(key-value)的形式存储,可对比着记忆
(注意:1.字典使用{ }表示,列表是[ ] 2.key必须是不变的,才能计算出value的值,如字符串,整数等,但是列表是可变的,不能作为字典的key)
代码:

user = {'name': 'gourdBaBy', 'age': '1'} #注意键值对中间是冒号 : 不同键值对中间是逗号 , 
print("name: " + user['name'])
print("age: " + user['age'])

结果:

name: gourdBaBy
age: 1

使用字典

添加键-值对

(字典添加时不关心添加顺序,一般新建空字典,然后根据逻辑添加数据)

代码:

user = {'name': 'gourdBaBy', 'age': 1}
print(user)

user['height'] = 60  #添加键值对的时候直接赋值给新key即可
user['ability'] = 'ironskin'
print(user)

结果:

{'age': 1, 'name': 'gourdBaBy'}
{'height': 60, 'age': 1, 'ability': 'ironskin', 'name': 'gourdBaBy'}

修改字典中的值

同列表一样,直接赋值语句即可
代码:

user = {'name': 'gourdBaBy', 'age': 1}
print(user['name'])
user['name'] = 'yeye' #此处修改name的值
print(user['name'])

结果:

gourdBaBy
yeye

判断字典中是否含有某个key,例如

代码:

info = {'tom': 18, 'jack': 22, 'lili': 55}
print ('tom' in info)  #in只是查询键(key)是否存在
print ('lucy' in info)
print (info.get('tom')) #get()可指定key来查询是否存在
print (info.get('lucy'))
print (info.get('lucy', 100)) #get()不存在时,可指定返回值

结果:

True
False
18
None
100

删除键-值对

使用del语句

代码:

user = {'name': 'gourdBaBy', 'age': 1}
print(user)
del user['age']  #删除age键值对
print(user)

结果:

{'age': 1, 'name': 'gourdBaBy'}
{'name': 'gourdBaBy'}

还可以使用pop()语句,效果同列表,但pop()必须带参数,因为列表是有序的,默认删除最后的一项,字典是无序的

代码:

info = {'tom': 18, 'jack': 22, 'lili': 55}
print (info.pop('tom'))  
print info
# print (info.pop())  #该句会报错,会提示必须传入参数

结果:

18
{'lili': 55, 'jack': 22}

遍历字典

可以用for循环遍历字典,字典是没有顺序的
代码:

user = {'name': 'gourdBaBy',  #字典建议写成这样的格式
        'age': 1,
        'ability': 'ironskin',
        'height': 60}

for key, value in user.items():  #注意是items()
    print("Key: " + key)
    print("Value: " + str(value) + "\n")

结果:

Key: name
Value: gourdBaBy

Key: ability
Value: ironskin

Key: age
Value: 1

Key: height
Value: 60

若代码中的

for key, value in user.items():

改为

for key in user.keys():或者for key in user:(此状态是默认状态)

则只遍历键(key)

同理,若改为

for value in user.values():

则只遍历值(value)

若有重复的值,可以使用set()函数,传入的参数是个list对结果进行重复值清除的处理

代码:

user = {'A': 2,
        'B': 1,
        'C': 2,
        'D': 1}

for value in set(user.values()): #set函数处理结果,清除重复值
    print("Value: " + str(value))

结果:

Value: 1
Value: 2

set

set是个无序不重复的集合,可传入iterable类型的数据,如无嵌套类型的列表和字典或字符串

代码:

a = {'a': 'b', 'c': 'd', 'c': 'e'}
print (set(a))  #传入字典,只显示key值,且不重复
a = 'ssdfasdf'
print (set(a))
a = ['a', 'b', 'c', 'c']
print (set(a))

结果:

set(['a', 'c'])
set(['a', 's', 'd', 'f'])
set(['a', 'c', 'b'])

set添加和删除

添加用add()方法,删除用remove()方法

代码:

myset = set(['a', 'b', 'c'])  #字典用法相同
print (myset)
myset.add('d')
print (myset)
myset.remove('a')
print (myset)

结果:

set(['a', 'c', 'b'])
set(['a', 'c', 'b', 'd'])
set(['c', 'b', 'd'])

set交集并集

两个set可以做数学里交集和并集的运算

代码:

myset1 = set(['a', 'b', 'c'])
myset2 = set(['a', 'c', 'd'])
print (myset1 & myset2)  #相交
print (myset1 | myset2)  #相并

结果:

set(['a', 'c'])
set(['a', 'c', 'b', 'd'])

嵌套

列表中嵌套字典

代码:

user1 = {'name': 'A', 'age': 11}
user2 = {'name': 'B', 'age': 12}
user3 = {'name': 'C', 'age': 13}

users = [user1, user2, user3]  #列表中存储字典
for user in users:
    print(user)

结果:

{'name': 'A', 'age': 11}
{'name': 'B', 'age': 12}
{'name': 'C', 'age': 13}

e.g. 创建30个相同的字典,存储到列表中,只打印前4个。
代码:

# 先创建一个空列表,用于存储创建的字典
users = []

# 创建30个字典
for user in range(30):  #循环30次,注意rang()函数的使用
    user = {'name': 'Jack', 'age': 10}
    users.append(user)

# 显示前4个
for user in users[:4]:
    print(user)
print("...")

结果:

{'name': 'Jack', 'age': 10}
{'name': 'Jack', 'age': 10}
{'name': 'Jack', 'age': 10}
{'name': 'Jack', 'age': 10}
...

字典中嵌套列表

注意:键(key)不能是列表,只能值(value)是列表

代码:

user = {
    'name': 'Jack',
    'favorite_book': ['葫芦娃', '少林寺', '尼姑庵'],
}
print("你的名字是:\n" + user['name'] + "\n你最喜欢的书是:")
for book in user['favorite_book']:  #遍历字典favorite_book键的值(列表)
    print(book)

结果:

你的名字是:
Jack
你最喜欢的书是:
葫芦娃
少林寺
尼姑庵

字典中嵌套字典

注意:键(key)不能是字典,只能值(value)是字典
代码:

users = {
    'BigDog': {  #键(key)为BigDog,值(value)为后边的字典
        'name': 'Jack',
        'age': 10,
        'location': 'CHN',
    },
    'SmallCat': {
        'name': 'Lili',
        'age': 12,
        'location': 'USA',
    },
}

for username, userinfo in users.items(): #键值对
    print("用户名是:" + username)
    print("个人信息是:")
    print("\t名字:" + userinfo['name'])
    print("\t年龄:" + str(userinfo['age']))
    print("\t地址:" + userinfo['location'])

结果:

用户名是:SmallCat
个人信息是:
    名字:Lili
    年龄:12
    地址:USA
用户名是:BigDog
    个人信息是:
    名字:Jack
    年龄:10
    地址:CHN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值