zoukankan      html  css  js  c++  java
  • 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)

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

  • 相关阅读:
    Netty快速入门(09)channel组件介绍
    Netty快速入门(08)ByteBuf组件介绍
    Netty快速入门(07)Netty入门例子
    Netty快速入门(06)Netty介绍
    Netty快速入门(05)Java NIO 介绍-Selector
    Netty快速入门(04)Java NIO 介绍-Channel
    Netty快速入门(03)Java NIO 介绍-Buffer
    Netty快速入门(02)Java I/O(BIO)介绍
    Netty快速入门(01)Linux I/O模型介绍
    老虎集团【4面】
  • 原文地址:https://www.cnblogs.com/Noul/p/9156105.html
Copyright © 2011-2022 走看看