zoukankan      html  css  js  c++  java
  • Python-数据类型之字典

    一: 概述

    • 字典是有大括号,逗号分隔,有k/v组成
    • 字典的键必须hashable,如数字,字符串,布尔值,元组

    二: 操作

    2.1 增

    2.1.1  直接赋值

    • 如果键不存在,则增加
    dic = {'name': 'wangys','age': 18}
    dic['sex'] = 'male'
    print(dic)
    # {'name': 'wangys', 'age': 18, 'sex': 'male'}
    • 如果键存在,则修改
    dic = {'name': 'wangys','age': 18}
    dic['name'] = 'wc'
    print(dic)
    
    # {'name': 'wc', 'age': 18}

    2.1.2 sedefault

    • 如果键不存在,则增加
    dic = {'name': 'wangys','age': 18}
    dic.setdefault('sex','male')
    print(dic)
    # {'name': 'wangys', 'age': 18, 'sex': 'male'}
    • 如果键存在,不过做更改
    dic = {'name': 'wangys','age': 18}
    dic.setdefault('name','wc')
    print(dic)
    # {'name': 'wangys', 'age': 18}

    2.2 删

    2.2.1 pop

    • 如果键存在,则删除这个k/v
    • 返回值为删除键的value值
    dic = {'name': 'wangys','age': 18}
    ret = dic.pop('age')
    print(ret)
    print(dic)
    
    # 18
    # {'name': 'wangys'}
    • 如果键不存在,则报错 KeyError
    dic = {'name': 'wangys','age': 18}
    ret = dic.pop('male')
    print(ret)
    print(dic)
    # KeyError: 'male'

    2.2.2 del

    • 键如果存在,则删除
    • 如果不存在,则包错 KeyError
    dic = {'name': 'wangys','age': 18}
    del dic['name']
    print(dic)
    del dic['male']
    print(dic)
    
    # {'age': 18}
    # KeyError: 'male'

    2.2.3 clear

    dic = {'name': 'wangys','age': 18}
    dic.clear()
    print(dic)
    #{}

    2.2.4 popitem

    • 随机删除一个元素
    • 返回值为kv组成的元祖
    dic = {'name': 'wangys','age': 18}
    print(dic.popitem())
    print(dic)

    # ('age', 18)
    # {'name': 'wangys'}

    2.3 改

    2.3.1  直接修改

    dic = {'name': 'wangys','age': 18}
    dic['name'] = 'wc'
    print(dic)
    # {'name': 'wc', 'age': 18}

    2.3.2 update

    • 两个字典合并
    • 如果键冲突,则更新,如果不冲突则增加
    dic1 = {'name': 'wangys','age': 18}
    dic2 = {'name': 'wc','sex': 'male'}
    dic1.update(dic2)
    print(dic1)
    # {'name': 'wc', 'age': 18, 'sex': 'male'}

    2.4 查

    2.4.1 直接查

    • 如果键不存在,则报错,KeyError
    dic1 = {'name': 'wangys','age': 18}
    print(dic1['name'])
    # wangys
    dic1 = {'name': 'wangys','age': 18}
    print(dic1['male'])
    # KeyError: 'male'

    2.4.2 get

    • 如果不存在,则返回None,也可以指定返回值
    dic1 = {'name': 'wangys','age': 18}
    ret1 = dic1.get('name')
    ret2 = dic1.get('male')
    ret3 = dic1.get('male','改键不存在')
    print(ret1,ret2,ret3)
    # wangys None 改键不存在

    2.4.3 setdefault

    name = {'name': 'wangys','age': 18}
    print(name.setdefault('name'))
    # wangys

    三: 其他操作

    3.1 for 循环

    • 得到的是key
    • for循环字典时不允许对字典进行增删
    dic1 = {'name': 'wangys','age': 18}
    for item in dic1:
        print(item)
    # name
    # age

    # 直接删除字典中的元素会报错

    dic = {'k1':1,'k2':2}
    for el in dic:
        dic.pop(el)
    # RuntimeError: dictionary changed size during iteration

    3.2  keys

    • 返回值是由key组成的特殊列表
    • 是可迭代的,可以被for循环
    dic1 = {'name': 'wangys','age': 18}
    ret = dic1.keys()
    print(ret)
    # dict_keys(['name', 'age'])
    dic1 = {'name': 'wangys','age': 18}
    ret = dic1.keys()
    for key in ret:
        print(key)

    3.3 values

    • 返回值是由values值组成的特殊列表
    • 是可迭代的,可以被for循环
    dic1 = {'name': 'wangys','age': 18}
    ret = dic1.values()
    print(ret)
    #dict_values(['wangys', 18])

    3.4 items

    • 是有key value组成的小元组后再次组成一个特殊列表,可迭代,可以被for循环
    dic1 = {'name': 'wangys','age': 18}
    ret = dic1.items()
    print(ret)
    # dict_items([('name', 'wangys'), ('age', 18)])

    四: 练习题

     # 将 s = 'k1:1|k2:2|k3:3' 改为{'k1': 1, 'k2': 2, 'k3': 3} 
    s = 'k1:1|k2:2|k3:3'
    new_list = s.split('|')
    dic = {}
    for item in new_list:
        k,v = item.split(':')
        dic[k] = int(v)
    print(dic)

    # li中的数字,如果大于66 就加入k1的列表中,否则添加到k2的列表中

    li = [11,22,33,44,55,66,77,88,99,90]
    dic = {'k1': [],'k2': []}
    for item in li:
        if item == 66:continue
        elif item > 66:
            dic.setdefault('k1').append(item)
        else:
            dic.setdefault('k2').append(item)
    print(dic)

    # 打印序号,商品名称,价格

    用户选择序号,打印商品名和价格

    选择q,退出

    goods = [
        {'name': '电脑','price': '10000'},
        {'name': '手表','price': '2000'},
        {'name': '衬衣','price': '180'},
        {'name': '裤子','price': '3000'},
    ]
    while 1:
        for index in range(1,len(goods)+1):
            print(index,goods[index-1]['name'],goods[index-1]['price'])
        choice = input('请输入序号: ').strip()
        if choice.upper() == 'Q':
            break
        elif choice and choice.isdigit():
            choice = int(choice)
            if choice >0 and choice <= len(goods):
                print(goods[choice-1]['name'],goods[choice-1]['price'])
            else:
                print('请输入范围内的序号')
        else:
            print('请输入正确的序号')

    字典数据操作实例

    对字典列表排序及字典列表最小最大值

    rows = [
        {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
        {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
        {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
        {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
    ]
    
    from operator import itemgetter
    import pprint
    
    rows_by_fname = sorted(rows, key=lambda x: x['fname'])
    rows_by_fname_ir = sorted(rows, key=itemgetter('fname'))
    min_item = min(rows, key=itemgetter('fname'))
    max_item = max(rows, key=itemgetter('fname'))
    pprint.pprint(rows_by_fname)
    pprint.pprint(rows_by_fname)
    print(min_item)
    print(max_item)
  • 相关阅读:
    centos6下安装配置DNS(bind)
    centos6下安装配置NFS
    如何在kettle里面加载hadoop
    jQuery练习JavaScript事件与事件对象
    摆上殷勤的工作&职场用祷文
    Ajax自动完成(autocomplete)响应文本框输入后显示模糊数据列表
    未来的书香
    重要的计算机学习资料(累计中)
    W4F学习笔记之一
    软件测试重要资料汇集
  • 原文地址:https://www.cnblogs.com/wc89/p/10702443.html
Copyright © 2011-2022 走看看