Python-字典

非空即真,非0即真
# 实现同样的功能,代码越少越牛逼

a = []
b = '' # not的意思是取反
print(not b)# 运行结果为“True”

c = ()
d = 0
e = None
if a:
    print('是真的')
else :
    print('是假的')
# 运行结果为“是假的” 

0、字典和list的性能上的区别

性能上字典比list取值快,比如找一个值,list需要挨个去寻找,字典是key-value的,可直接根据key去查找。

一、字典 map

字典是比较常用的基本的数据类型之一,字典是无序的

k - v(key - value)

# import this
# age name sex addr phone qq email

# k - v(key - value)
# map
name1 = {'name':'name1',
        'age':18,
        'sex':'unknow',
        'addr':'天通苑',
        'qq':12345678,
        'email':'name1@qq.com',
         'age':23
        }
print(name1)
#运行结果:{'email': 'name1@qq.com', 'addr': '天通苑', 'sex': 'unknow', 'qq': 12345678, 'name': 'name1', 'age': 23}

1、增加

(1)第一种增加方式:如果没有就直接添加,如果有,就进行修改

name1['女朋友']='漂亮'
print(name1)
#运行结果:
# {'addr': '天通苑', '女朋友': '漂亮', 'qq': 12345678, 'name': 'name1', 'sex': 'unknow', 'age': 23, 'email': 'name1@qq.com'}

(2)第二种:name1.setdefault()

setdefault()这种方式,如果key已经存在,那么就不会修改。

name1.setdefault('house','10套')
print(name1)
# 运行结果:{'sex': 'unknow', 'house': '10套', 'email': 'name1@qq.com', 'age': 23, 'addr': '天通苑', 'name': 'name1', '女朋友': '漂亮', 'qq': 12345678}

2、修改

name1['女朋友']='非常漂亮'
print(name1)
# 运行结果:{'name': 'name1', 'addr': '天通苑', 'email': 'name1@qq.com', 'sex': 'unknow', 'age': 23, 'qq': 12345678, '女朋友': '非常漂亮', 'house': '10套'}

name1.update(a=1,b=2)

往字典里更新值,或者说增加一个key-value

 

3、删除

(1)name1.pop('女朋友')  指定key删除,删除的时候key不存在是会报错的


name1.pop('女朋友')
print(name1)
#运行结果:{'age': 23, 'qq': 12345678, 'sex': 'unknow', 'email': 'name1@qq.com', 'addr': '天通苑', 'name': 'name1', 'house': '10套'}

(2)del name1['age']  用del来删,删除的时候key不存在是会报错的

del name1['女朋友11']
print(name1)
#会报错如下
#KeyError: '女朋友11'

(3)清空字典

name1.clear() 
print(name1) # 运行结果:{}

(4)随机删除一个key

name1.popitem()
print(name1)
# 运行结果:{'email': 'name1@qq.com', 'addr': '天通苑', 'name': 'name1', 'qq': 12345678, 'sex': 'unknow'}

4、取值

(1)若key存在,可获取到值,若key不存在,则会报错

print(name1['addr'])
# 运行结果:天通苑
print(name1['addr111'])
# 运行结果:报错如下
# KeyError: 'addr111'

(2)若key存在,可获取到值,若key不存在,则返回设置的返回值。若未设置返回值,则返回none。如下所示

print(name1.get('email','无法获取到email'))
# 运行结果:name1@qq.com
print(name1.get('emailqqqq','无法获取到email'))
# 运行结果:无法获取到email

(3)name1.keys()

print(name1.keys()) 将字典中所有的key取出来,放在一个列表里

 

(4)

name1.values()

print(name1.values()) 将字典中所有的values取出来,放在一个列表里

 

 (5)判断一个key是否在一个字典里的方法:

示例:

users = {
    'fd':'123455',
    'xzh':'456789'
}

username = 'fd'
# print(d.keys())
# print(username in users.keys())
# print(username in users) #判断这个key是否存在的
#users.has_key(username) #python2里面的用法

 

 

 

二、把一个字典增加到另外一个字典里

name1.upadate(name2)  将后面的字典加入到前面的字典中,即将name2加入到name1中

name2 = {'computer':'三台'}
name1.update(name2)# 把一个字典加入到另外一个字典里面
print(name1)
#{'age': 23, 'name': 'name1', 'email': 'name1@qq.com', 'addr': '天通苑', 'sex': 'unknow', 'qq': 12345678, 'computer': '三台'}

print(name1.values())
# dict_values([23, 'name1', 'name1@qq.com', '天通苑', 'unknow', 12345678, '三台'])
print(name1.keys())
# dict_keys(['age', 'name', 'email', 'addr', 'sex', 'qq', 'computer'])
for k,v in name1.items():
    print(k,v)
    # age
    # 23
    # name
    # name1
    # email
    # name1 @ qq.com
    # addr
    # 天通苑
    # sex
    # unknow
    # qq
    # 12345678
    # computer
    # 三台

 练习:

info =  [
   {
      'xiaohei':
         {
            'money':10000,
            'cars':['Ben-z','audi','BMW'],
            'info': {
               'phone':186212312,
               'age':36,}
         }
    },
   {'xiaohong':
       {
          'house': {
             '朝阳':2,
             '海淀':3,
             '昌平':5
          },
          'lan':['ch','en','jp'],
       }
    }
]

# info[0]['xiaohei']['cars'].append('新车')
# print(info)
# info[0]['xiaohei']['info']['addr'] = 'sdfsdf'
# print(info)
info[1]['xiaohong']['house']['海淀']+=2
print(info)
# [{'xiaohei': {'cars': ['Ben-z', 'audi', 'BMW'], 'info': {'age': 36, 'phone': 186212312}, 'money': 10000}}, {'xiaohong': {'house': {'朝阳': 2, '海淀': 5, '昌平': 5}, 'lan': ['ch', 'en', 'jp']}}]
View Code

三、高效循环字典的方式

d = {'a':1,'b':2}
# print(d.items())
# for k,v in d.items():
#     print(k,v)  #可以
for k in d:
    print(k,d.get(k))
# 输出结果:
# a 1
# b 2

 推荐用for k in d的方式,因为第一种方式得先把字典转成二维数组,浪费性能。

print(d.items())
# [('username', 'xiaohei'), ('id', 1), ('grade', '天马座'), ('addr', '北京'), ('age', 18), ('a', 1), ('b', 2)]
# for k,v in d.items():
#         print(k,v)

for k in d:
    print(k,d.get(k))
View Code

  为什么for k,v可以取两个值,因为二维数组里刚好都是两个值。

 

 

四、字典练习

users = {
    'fd':'1234',
    'lhy':'456'
}

for i in range(3):
    username = input('username:').strip()
    password = input('password:').strip()
    cpwd = input('pwd:').strip()
    if username =='' or password =='' or cpwd == '':
        print('账号/密码不能为空')
    elif password != cpwd:
        print('两次输入的密码不一致')
    elif username in users:
        print('账号已经存在')
    else:
        users[username] = password
        print('注册成功!')
        break
else:
    print('错误次过多')

print(users)

先判断不用操作数据库的部分

 

posted @ 2018-06-08 15:57  灿烂初秋  阅读(215)  评论(0编辑  收藏  举报