• python字典知识点的梳理


       最近将字典的数据Insert Into得到sqllite3报错,调试了好久才解决。系统开发完后,决心梳理下字典知识点。先解析一下遇到问题的这段代码:

    import sqlite3
    data = {"name": "张三", "sex": "", "age": 20}   # 要导入数据库的数据,数据类型为字典
    
    dbpath = "./51job.db" #数据库表名
    
    conn = sqlite3.connect(dbpath) # 连接数据库
    
    cur = conn.cursor() # 创建游标对象
    
    sql = '''
         insert into test(name, sex, age
         )
        values(%s)''' % ",".join("?" * len(data), ) 
    # %s是占位符 , ?也是占位符,

    # 这里注意,代表单个数值的占位符一定要用? len()在这里代表字典的键值对个数
    cur.execute(sql, tuple(data.values(), )) # 执行sql语句;tuple(data.values(), )是将得到所有的值转换成元组 conn.commit() # 提交 cur.close() # 关闭游标 conn.close() # 关闭数据库连接

    上面的问题虽然解决了,但是还是有些疑惑:比如,为什么插入数据的值在cur.execute()不能用data.values(),而是再转换成元组;",".join("?" * len(data), ) 和tuple(data.values(), )两处为什么加了",",这有什么作用?各位大佬如果看到这里可以帮忙解答下。



    经过最近的一次开发,感觉数据类型转换这块知识点比较薄弱,趁此机会,好好梳理下字典。
    本次按照增、删、改、查的逻辑方式对字典进行阐述
    #
    data = {'name': '张三', 'sex': '', 'age': 20}
    dataInput = int(input("请输入您的ID:"))   # 将输入的ID转换为int类型
    data["id"] = dataInput
    print(data)    # 输出为{'name': '张三', 'sex': '男', 'age': 20, 'id': 3},id新增成功
    #
    
    # del  删除字典中的某一键值对
    data1 = {'name': '张三', 'sex': '', 'age': 20, 'id': 3}
    print("删除前data1['id']为%d" % data1['id'])
    del data1['id']
    print("删除后data['id']为%d" % data1['id'])  # 删除了指定键值对后,再次访问会报错
    
    # clear 清空字典
    data2 = {'啤酒': '雪花纯生', '白酒': '宋河粮业', '红酒': '长城五星'}
    print("清空前data2['id']为%s" % data2)   # 输出为:清空前data2['id']为{'啤酒': '雪花纯生', '白酒': '宋河粮业', '红酒': '长城五星'}
    data2.clear()
    print("清空后data2['id']为%s" % data2)   # 输出为: 清空后data2['id']为{}
    #
    data = {'name': '张三', 'sex': '', 'age': 20}
    print("修改前data['age']为%d" %data['age'])       # 输出为:修改前data['age']为20
    data['age'] = 28
    print("修改后data为%s" % data)  # 输出为:修改后data为{'name': '张三', 'sex': '男', 'age': 28}
    #
    data = {'name': '张三', 'sex': '', 'age': 20}
    
    # 字典访问
    print(data['name'])    # 输出为: 张三
    
    '''
    用data[键]获取值,如果该键值对不存在会报错,
    此时可以使用data.get(键)来请求:若有该键值对,返回对应的值;若没有该键值对,默认返回None
    另外,data.get(键, 自定义输出值) 表示若没有该键值对,输出值为自定义输出值
    '''
    print(data.get('name'))  # 打印对应的值,输出为:张三
    print(data.get('id'))   # 没有该键值对,输出为:None
    print(data.get('id', '没有该键值对'))  # 打印自定义输出值,输出为:没有该键值对
    
    print(data.keys())   # 打印字典中全部的键(列表)   输出为:dict_keys(['name', 'sex', 'age'])
    print(data.values())  # 打印字典中全部的值(列表)  输出为:dict_values(['张三', '男', 20])
    print(data.items())   # 得到所有的项(列表),每个键值对是一个元组 输出为:dict_items([('name', '张三'), ('sex', '男'), ('age', 20)])
    
    print(tuple(data.keys()))   # 打印字典中全部的键,将值转变为元组   输出为:('name', 'sex', 'age')
    print(tuple(data.values()))  # 打印字典中全部的值,将值转变为元组  输出为:('张三', '男', 20)
    print(tuple(data.items()))   # 将得到的所有项转变为元组,每个键值对是一个元组 输出为:(('name', '张三'), ('sex', '男'), ('age', 20))
    
    # 遍历所有的键
    for key in data.keys():
        print(key)   # 输出为: name sex age
    
    # 遍历所有的值
    for values in data.values():
        print(values)  # 输出为: 张三 男 20
    
    # 遍历所有的键值对
    for keys, values in data.items():
        print(keys, values)
        '''
        输出为:
        name 张三
        sex 男
        age 20
        
        '''
     知识拓展  用enumerate将列表遍历出键值对的效果

    data = {'第一名', '第二名', '第三名'}
    
    for i,value in enumerate(data):   # i为索引下标值
        print(i+1, value)
        '''
        结果输出为:
        1 第一名
        2 第二名
        3 第三名
        '''
  • 相关阅读:
    动态网页技术--JSP(5)
    动态网页技术--JSP(4)
    动态网页技术--JSP(3)
    动态网页技术--JSP(2)
    动态网页技术--JSP(1)
    动态网页技术--Servlet
    TomCat服务器搭建
    06_多线程
    05_进程间通信 IPC
    04_进程池
  • 原文地址:https://www.cnblogs.com/yinze/p/15766449.html
Copyright © 2020-2023  润新知