zoukankan      html  css  js  c++  java
  • 字典

    字典:

    基础数据类型之一,{}以键值对的形式存储数据。
    dic = {'name':'Laonanhai','age':45}
    以Key:value形式,映射,存储的大量的关系型数据。
    关系型数据:
    dic = {'name':'laonanhai',
    'age':'45',
    'name_list':['反面教材','俊俊',...]
    }
    数据类型的分类
    可变(不可哈希hash):
    不可变(可哈希hash):
    容器类:
    容器类的数据类型:list,tuple,dict,l1 =[11,22,33,[44,55]]
    非容器类的数据类型;str,int,bool.s1 = '[11,22,33]'
    字典的key必须是不可变的数据类型,是唯一的
             hash算法:
    字典的键通过hash表转换成数字,采用二分查找查询数字。
    字典的value可以是任意数据类型。
    字典的查询速度非常快,存储的大量的关系型数据。
    字典在python3.5包含3.5之前都是无序,但3.6之后是有序的
    。

    键唯一:

    dic = {
              'name' = 'alex'
              'name'='Wusir'
      }
    print(dic)
    字典的键必须是不可变得可哈希的数据类型:
    dic = {
            'name' : 'alex'
            [1,2,3] : 'values',
    }
    print(dic)   #报错 键必须是不可变的

    字典的增删改查:

    1. 有则覆盖,无则添加
    dic = {'name':'老男孩','age':56,'hobby':'women'}
    dic['sex'] = 'LaddyBoy'
    print(dic)       # (在后面追加)
    dic['name'] = 'Alex'
    print(dic)   有则覆盖,没有就添加     
    {'name': 'Alex', 'age': 56, 'hobby': 'women'}
    View Code
     2.setdefault有则不变,无则添加  
    dic = {'name':'老男孩','age':56,'hobby':'women'} 
    setdefault('sex')
    print(dic)  有键没有值(None)不报错
    dic.setdefault('sex','Laddboy')
    print(dic)
    dic.setdefault('name','alex')
    print(dic)    有则不变,无则添加  
    {'name': '老男孩', 'age': 56, 'hobby': 'women'}
    View Code
    1,POP   按键删  有返回值,返回的是键对应的值
    dic = {'name':'老男孩','age':56,'hobby':'women'}
    print(dic.pop('age'))  #(56)有返回值,返回的是键对应的值
    print(dic.pop('age1','没有此键...'))
    View Code
    2.clear()   清空字典
    dic = {'name':'老男孩','age':56,'hobby':'women'}
    dic,clear
    print(dic)
    View Code
    3.popitem   随机删除,有返回值,返回值为元组,里面是删除的键值对
    dic = {'name':'老男孩','age':56,'hobby':'women'}
    print(dic.popitem())  #随机删除,有返回值,返回值为元组,里面是删除的键值对
    print(dic)
    View Code
    4.del
    1,删除整个字典(在内存级别删除)
    dic = {'name':'老男孩','age':56,'hobby':'women'}
    del dic
    View Code
    2.按照键删除键值对
    dic = {'name':'老男孩','age':56,'hobby':'women'}
    del dic['name']
    print(dic)
    View Code
    1.有则覆盖,没有就添加
    dic = {'name':'老男孩','age':56,'hobby':'women'}
    dic['name'] = 'Alex' #有则覆盖,没有就添加
    print(dic)
    View Code
    2.update两个字典的更新
    dic = {'name':'jin','age':18,'sex':'male'}
    dic2 = {'name':'alex','weight':75}
    dic2.update(dic)#将dic里面的所有键值对覆盖添加到dic2中,dic不变
    print(dic) #{'name':'jin','age':'18','sex':'male'}
    print(dic2)#{'name':'jin','weight':'75','age':'18','sex':'male'}
    View Code
    1.利用键去查(无此键报错)
    dic = {'name':'老男孩','age':56,'hobby':'women'}
    dic['name']
    print(dic['name'])       #(老男孩)
    View Code
    2.get  (无此键默认返回None,可设置返回值)m
    dic = {'name':'老男孩','age':56,'hobby':'women'}
    dic.get('name')
    print(dic.get('name'))
    print(dic.get('name1'))
    print(dic.get('name1','sb没有此键'))
    View Code
    3.for循环查询
    dic = {'name':'老男孩','age':56,'hobby':'women'}
    dic.keys(), dic.values(), dic.items()  #类似于list但不是list的类型,没有索引。可遍历。
    print(dic.keys(),type(dic.keys()))
    for key in dic.keys():
        print(key)
    l_key = list(dic.keys())
    print(l_key)
    for value in dic.values():
        print(value)
    
    
    l_value = list(dic.values())
    print(l_value)
    print(dic.items())
    k,v = ('name', '老男孩')
    for k,v in dic.items(): # [('name', '老男孩'), ('age', 56), ('hobby', 'women')]
    print(k,v)
    View Code
    分别赋值概念
    a, b = 1, 2
    a, b = ('alex', '34')
    a, b = ['alex', '34']
    有 如下 a = 1 b = 3,用一行代码将a b值互换。
    a = 1
    b = 3
    a, b = b, a
    print(dic.items())
    for i in [22,33,44]:
        print(i)
    for i in [(11,22),(33,44),(55,66)]:
        print(i)
    字典的嵌套
    dic = {
        'name_list': ['碗蓉', '俊俊', '爽妹'],
        'status': None,
        'personal_msg': {
            'name': '反面教材',
            'age': 25,
            'hobby_list': ['抽烟', '喝酒', '烫头'],
        }
    }
    1,给dic添加一个键值对,学校:老男孩
    dic['学校'] = '老男孩'
    print(dic)
    #{'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头']}, '学校': '老男孩'}
    2,将status对应的值改成True
    dic['status'] = True
    print(dic)
    {'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': True, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头']}}
    3,给name_list对应的列表追加一个元素:平平
    print(dic['name_list'])
    dic['name_list'].append('平平')
    print(dic)
    ['碗蓉', '俊俊', '爽妹']
    {'name_list': ['碗蓉', '俊俊', '爽妹', '平平'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头']}}
    4,给personal_msg对应的字典添加一个键值对sex:男
    dic2 = dic['personal_msg']
    dic2['sex'] = ''
    print(dic)
    dic['personal_msg']['sex'] = ''
    print(dic)
    {'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头'], 'sex': ''}}
    5,将hobby_list 对应的列表中的烫头改成唱歌。
    dic['personal_msg']['hobby_list'][-1] = '唱歌'
    print(dic)
    {'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '唱歌']}}
    View Code

    练习题:

    1、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}
    li = 'k:1|k1:2|k2:3|k3:4'.split('|')
    dic = {}
    for i in li:
        i = i.split(':')
        dic.setdefault(i[0],int(i[1]))
    print(dic)
    View Code
    2、元素分类
        有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
    即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
    dic = {'k1': [], 'k2': []}
    li= [11,22,33,44,55,66,77,88,99,90]
    for i in li:
        if i <66:
    #         # dic.setdefault('k2',[]).append(i)
            dic['k2'].append(i)
        elif i >66:
        # else:
    #         dic.setdefault('k1',[]).append(i)
            dic['k1'].append(i)
    print(dic)
    View Code
    3、输出商品列表,用户输入序号,显示用户选中的商品
     商品 li = ["手机", "电脑", '鼠标垫', '游艇']
    要求:1:页面显示 序号 + 商品名称,如:
              1 手机
         2 电脑
    2: 用户输入选择的商品序号,然后打印商品名称
    3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
    4:用户输入Q或者q,退出程序。
    li = ["手机", "电脑", '鼠标垫', '游艇']
    while True:
        for i in range(len(li)):
            print('{}	{}'.format(i + 1, li[i]))
        msg = input("请输入商品序号:(退出:Qq)").strip() # 1a
        if msg.upper() == 'Q':
            print("欢迎使用!")  # 加一个购买的商品展示
            break
        elif msg.isdigit():
            msg = int(msg)
            if 0 < msg <= len(li):
                print("您选择的商品是:%s" % li[msg-1])
    
            else:
                print("您选择的商品序号有误,请重新输入!")
        else:
            print("您选择的商品序号中包含非数字字符,请重新输入!")
    View Code
  • 相关阅读:
    每日一篇文献:Robotic pick-and-place of novel objects in clutter with multi-affordance grasping and cross-domain image matching
    每日一篇文献:Intuitive Bare-Hand Teleoperation of a Robotic Manipulator Using Virtual Reality and Leap Motion
    每日一篇文献:Virtual Kinesthetic Teaching for Bimanual Telemanipulation
    HEBI Robotic Arm VR Teleoperation
    「iQuotient Case」AR device teleoperated robotic arm
    VR and Digital Twin Based Teleoperation of Robotic Arm
    HEBI Robotic Arm VR Teleoperation
    Human Robot Interaction
    Immersive Teleoperation Project
    机器人演示学习
  • 原文地址:https://www.cnblogs.com/ls13691357174/p/9094078.html
Copyright © 2011-2022 走看看