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)
  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    How to check if one path is a child of another path?
    Why there is two completely different version of Reverse for List and IEnumerable?
    在Jenkins中集成Sonarqube
    如何查看sonarqube的版本 how to check the version of sonarqube
    Queue
    BFS广度优先 vs DFS深度优先 for Binary Tree
    Depth-first search and Breadth-first search 深度优先搜索和广度优先搜索
    102. Binary Tree Level Order Traversal 广度优先遍历
    How do I check if a type is a subtype OR the type of an object?
  • 原文地址:https://www.cnblogs.com/wc89/p/10702443.html
Copyright © 2011-2022 走看看