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 第三名
    '''
posted on 2022-01-06 11:22  希望的天空  阅读(116)  评论(0编辑  收藏  举报