python字典

字典

一.定义

  d=dict(a=2,b='hello')   ##直接定义赋值
  d={}.fromkeys()  ##采用fromkeys函数定义

打印模块pprint,使输出更美观

 import pprint  ##导入pprint模块
 user=[]
 for i in range(10):  ##生成user列表user1-user10用户
     user.append('user%d' %(i+1))
 pprint.pprint({}.fromkeys(user,'123456'))  ##一键赋值所有key:123456

二、字典的操作
1.查看key值对应的value值

print(d['b'])  ##value值存在时,输出;不存在时,报错
print(d['f'])
print(d.get('b'))  ##value值存在时,输出;不存在时,输出None
print(d.get('f'))

2.指定输出字典的key、value、key-value

print(d.keys())    ##打印字典中所有的key值
print(d.values())  ##打印字典中所有的value值
print(d.items())   ##打印字典中所有的key-value值对

3.修改字典元素

d['a']=100  ##key存在时,修改对应的value值;不存在时,新增
d['f']=11  
d2=dict(a=110,x=0)  ##key存在时,覆盖原value值;不存在时,新增
print(d.update(d2))
d.setdefault('a',100)  ##key存在时,不做操作;不存在时,新增d.setdefault('x',100)

4.遍历字典

 for key,value in d.items():
     print(key,value)

5.删除字典元素

 del d['a']  ##key值存在则删除;不存在则报错
 del d['f']

 value=d.pop('a')  ##key值存在则删除,返回对应的value值;不存在则报错
 value=d.pop('f') 

pair=d.popitem()  ##随机删除,一般是最后一个,返回值为key-value值对
print(d,pair)

6.实现switch,case功能

#注意:python不支持switchcase功能,需要用其他方法实现
num1 = int(input('please input a num:'))
choice = input('please make your choice:')
num2 = int(input('please input a num:'))
dict = {       ##实现两个int数字加减乘除的效果
    '+': num1 + num2,
    '-': num1 - num2,
    '*': num1 * num2,
    '/': num1 / num2,
}
print(dict.get(choice, 'error'))   ##get()函数默认为None

7.列表去重的第二种方法

a=[1,3,4,3,6,1]
print({}.fromkeys(a).keys())  ##拿出字典的key值
##将列表生成字典,相同key值会自动覆盖,value值默认为none

三、练习
1.生成172.25.254.1~172.25.254.200随即IP,并统计次数

import pprint  ##pprint模块,输出更美观
import random  ##random模块,生成随机数

d = {}   ##定义空字典
for num in range(200):   ##生成200个随机数
    ip= '172.25.254.' + str(random.randint(1,200))  ##将int型转换成str型
    if ip in d:   ##判断ip是否存在
        d[ip] += 1  ##若存在,则对应的value值加1
    else:
        d[ip] = 1   ##若不存在,则赋值1
pprint.pprint(d)  ##pprint打印结果

2.生成1~200的随机数,升序排列并统计次数

import pprint
import random
###与练习1不同的是,需要定义随机数列表并排序
d = {}  ##定义数字存储的字典
l = []  ##定义随机数的列表
for num in range(200):   ##生成200个随机数字
    l.append(random.randint(1,200))
l.sort()  ##对数字列表进行升序排列
for N in l:
    if N in d:
        d[N] += 1
    else:
        d[N ]= 1
pprint.pprint(d)

2.用户登陆优化:

import pprint
##优化的目的:管理系统可以新建、登陆、删除、查看用户信息等
userdict = {
    'root': 'westos',
    'kiosk': 'redhat'
}
menu = """
        Users Operation
    1).New user
    2).User login
    3).Delete user
    4).View users
    5).exit  
Please input your choice:"""
while 1:  ##采用死循环的格式
    choice = input(menu)
    if choice == '1':
        print('New User'.center(30, '*'))
        name = input('please input a username:')
        if name in userdict:  ##判断用户是否存在
            print(name + ' is already exist!')
        else:    ##用户不存在,则在用户字典中添加用户信息
            passwd = input('please set your passwd:')
            userdict[name] = passwd
            print(name + ' is ok!')
    elif choice == '2':
        print('User Login'.center(30, '*'))
        for i in range(3):  ##限制用户3次登陆机会
            USER = input("please input username:")
            if USER in userdict:  ##判断登陆用户是否存在
                PASS = input("please input passwd:")
                if PASS == userdict[USER]:  ##判断用户密码
                    print("Login successfully")
                    break
                else:
                    print("Login failly")
            else:
                print(USER + " is not exist")
                continue
        else:
            print("ERROR:Time is over")
    elif choice == '3':
        print('Del User'.center(30, '*'))
        name = input('please input a username:')
        if name in userdict:  ##删除前,先判断用户是否存在
            del userdict[name]  ##此处可增加限制,密码匹配方可删除
            print(name + ' is already deleted!')
        else:
            print(name + ' is not exist!!')
    elif choice == '4':
        print('View User'.center(30, '*'))
        pprint.pprint(userdict)  ##pprint打印用户信息
    elif choice == '5':
        print('Exit'.center(30, '*'))
        break
    else:
        print('ERROR!!!')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值