针对于字典的基本操作

对字符串,列表,元组的基本操作:

>>> a=['a','b','c']
>>> b=['d','e','f']
>>> tuple(a)
('a', 'b', 'c')
>>> tuple(b)
('d', 'e', 'f')
>>> list(a)+list(b)
['a', 'b', 'c', 'd', 'e', 'f']
>>> a+b
['a', 'b', 'c', 'd', 'e', 'f']
>>> str(tuple(a))
"('a', 'b', 'c')"
>>> str(list(b))
"['d', 'e', 'f']"
>>>

作业:

要求:输入姓名、年龄、工作和爱好,按下列格式输出:

    ---info of Linus---
    Name  :  Linus
    Age   :  18
    job   :  IT
    Hobbie:  Read
    -------end------

作业:上述名片打印拓展成存储多人信息的列表。
		[

		["Linus", 18,  "IT", "Read"],

		["Tom", 17, "IT", "Sing"],

		....

		]

字典

思考:

场景1:

如果有列表:

li=["python","java","c++"]

需要对"python"这个名字写错了,通过代码修改:

li[0]="python"

如果列表的顺序发生了变化,如下:

li=["java","c++","python"];

此时就需要修改下标,才能完成名字的修改

li[2]="python"

有没有方法,既能存储多个数据,还能再访问元素的很方便就能够定位到需要的那个元素呢?

答:

​ 字典

场景2:

学生信息列表,每个学生信息包括学号、姓名、年龄等,如何从中找到某个学生的信息?

studens=[201801,'张山',18],[201802,'李四',19],[201803,'王二'17]

循环遍历?这样很麻烦

实际生活中,我们还经常使用汉语字典,英汉词典等等

程序中的字典:

>>> info ={"username":"limei","age":18,"class":"one"}
>>> info
{'username': 'limei', 'age': 18, 'class': 'one'}
>>>

字典是除列表外python之中最灵活的内置数据结构类型。字典是一种可变的数据类型,且可存储任意类型对象。

列表是有序的对象结合。

字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

格式:

{key:value1,key:value2,......}

描述:


1.-值对中间用冒号(":")连接;

2.key:value组成字典里的一个元素;

3.-值对(元素)之间用逗号(",")隔开;

4.整个字典用花括号"{}"包裹起来。

字典的创建

创建一个空字典

dict={}
type(dict)

创建一个有多个值的字典

1.直接赋值法:d={key1:value1,key2:value2},如:

>>> info ={"username":"limei","age":18}
>>> info
{'username': 'limei', 'age': 18}
>>>

2.通过函数创建字典(强制转换):

例子:

#方法1:
>>> info = dict(usrname = "Lilei", age = 18, Class = "one")
>>> info
#结果:{'usrname': 'Lilei', 'age': 18, 'Class': 'one'}
>>>
#方法2:
>>> info = dict([['name', 'LiLei'], ['age', 18]])
>>> info
#结果:{'name': 'LiLei', 'age': 18}
>>>
#方法3:
>>> info = dict((('name', 'LiLei'), ('age', 18)))
>>> info
#结果:{'name': 'LiLei', 'age': 18}
>>>
#方法4:
>>> info = dict([('name', 'LiLei'), ('age', 18)])
>>> info
#结果:{'name': 'LiLei', 'age': 18}
>>>
#方法5:
>>> info = dict((['name', 'LiLei'], ['age', 18]))
>>> info
#结果:{'name': 'LiLei', 'age': 18}
>>>

3.通过字典的fromkeys方法创建字典

>>> info ={"username":"limei","age":18,"class":"one"}#如果没有指定默认值,默认为None;
>>> info
{'username': 'limei', 'age': 18, 'class': 'one'}
>>> info =dict.fromkeys("hello")
>>> info
{'h': None, 'e': None, 'l': None, 'o': None}
>>> info =dict.fromkeys(["limei","lee","jack"],"123456")#给每个元素设置默认值为"1232456"
>>> info
{'limei': '123456', 'lee': '123456', 'jack': '123456'}
>>>

字典的常见操作

字典值的访问(查的一种)

字典是无序的,不能通过索引值来获取值。

>>> info =info[2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 2
>>>
  • 通过键(key)访问值(value)
    • key值不存在的时候,会报错。
>>> info ={"username":"limei","age":18,"class":"one"}
>>> info["username"]#通过关键字访问对应的值
'limei'
>>> info["age"]
18
>>> info["usename"]#没有对应的key,报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'usename'
>>>
  • 使用get访问值(value)

    不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值。

    • 当key不存在的,不会抛出异常,返回None.
>>> info ={"name":"limei","age":18}
>>> info.get("name")
'limei'
#当key不存在的,不会抛出异常,返回None.
>>> info.get("job")
>>> type(info.get("job"))
<class 'NoneType'>
>>>

  • 直接添加新键-值对
    在使用 变量名[‘键’] = 数据 时,这个“键”在字典中,不存在,那么就会新增这个元素:
>>> info = {"name": "LiLei", "age": 18}
>>> info["job"]="IT"
>>> info
{'name': 'LiLei', 'age': 18, 'job': 'IT'}
>>>
  • dict.update(dict1)

​ 把字典dic1的键/值对更新到dic里

当两个字典中的键不同时,把dic1的键值插入到dic中
当两个字典中存在相同键时,dic1覆盖dit的键值

#当两个字典完全不相同时
>>> info={"name":"limei","age":18}
>>> info1={"job":"IT","salary":10000}
>>> info.update(info1)
>>> info
{'name': 'limei', 'age': 18, 'job': 'IT', 'salary': 10000}
>>> info1
{'job': 'IT', 'salary': 10000}
>>>
#当两个字典存在相同键时,会覆盖前面的键值
>>> info={"name":"limei","age":18}
>>> info2={"name":"tom","salary":10000}
>>> info.update(info2)
>>> info
{'name': 'tom', 'age': 18, 'salary': 10000}
>>> info2
{'name': 'tom', 'salary': 10000}
>>>

  • del dict[keys]
    • 删除指定的元素/键-值对
    • 没有返回值
>>> info ={"name":"tom","age":18,"salary":10000}
>>> del info["salary"]
>>> info
{'name': 'tom', 'age': 18}
>>>
  • del dict
    • 删除整个字典
>>> info ={"name":"limei","age":18}
>>> del info
>>> info
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'info' is not defined
>>>
  • dict.clear()
    • 清空整个字典
>>> info ={"name":"limei","age":18}
>>> info.clear()
>>> info
{}
>>>
  • dict.pop(keys)
    • 删除指定键-值对
>>> info ={"name":"tom","age":18,"salary":10000}
>>> info.pop("age")
18
>>> info
{'name': 'tom', 'salary': 10000}
>>>
  • dict.popitem()
    • 随机删除字典的一组键值对
    • 有返回值,以元组的方式返回
    • 应用不广泛
>>> info ={"name":"tom","age":18,"salary":10000}
>>> info.popitem()
('salary', 10000)
>>> info
{'name': 'tom', 'age': 18}
>>>

字典的每个元素中的数据是可以修改的,只要通过key找到,即可修改

  • 直接修改
>>> info ={"name":"tom","age":18,"salary":10000}
>>> info["name"]="limei"
>>> info
{'name': 'limei', 'age': 18, 'salary': 10000}
>>>
  • dict.setdefault()
    • 键存在,不改动,返回字典中相应的值
    • 键不存在,在字典中添加相应的键值对,并返回相应的值
#键存在,不改动,返回字典中相应的值
>>> info ={"name":"tom","age":18,"salary":10000}
>>> info.setdefault("age",20)
18
>>> info
{'name': 'tom', 'age': 18, 'salary': 10000}
#键不存在,在字典中添加相应的键值对,并返回相应的值
>>> info ={"name":"tom","age":18,"salary":10000}
>>> info.setdefault("job","IT")
'IT'
>>> info
{'name': 'tom', 'age': 18, 'salary': 10000, 'job': 'IT'}
>>>

  • dict.keys()

    • 返回字典中的所有键(keys)
  • dict.values()

    • 返回字典中的所有值(values)
  • dict.items()

    • 返回字典中的所有键-值对(keys-values)
  • 某元素是否存在:

    • key in dict
      • 存在,True
      • 不存在,False

Python2中,可以用dict.has_key().如果key在字典中,返回True;否则,返回False.

>>> info ={"name":"tom","age":18,"salary":10000}
>>> info.keys()
dict_keys(['name', 'age', 'salary'])
>>>
>>> info.values()
dict_values(['tom', 18, 10000])
>>>
>>> info.items()
dict_items([('name', 'tom'), ('age', 18), ('salary', 10000)])
>>>
>>> "age" in info
True
>>> "job" in info
False
>>>

字典的遍历

(1)遍历字典的键(key)

>>> info ={"username":"limei","age":18,"class":"one"}
>>> for key in info.keys():
...     print(key,end=" ")
...
username age class >>>

(2) 遍历字典的值(value)

>>> info = {"usrname":"Lilei","age":18,"Class":"one"}
>>> for value in info.values():
...     print(value,end = " ")
...
Lilei 18 one >>>
```

(3)遍历所有的项(items)

>>> info = {"usrname":"Lilei","age":18,"Class":"one"}
>>> for item in info.items():
...     print(item,end =" ")
...
('usrname', 'Lilei') ('age', 18) ('Class', 'one') >>>
```

(4)遍历字典的键-值对(key-value)

>>> info = {"usrname":"Lilei","age":18,"Class":"one"}
>>> for key,value in info.items():
...     print(key,":",value,end = " ")
...
usrname : Lilei age : 18 Class : one >>>
```

例子:

dic={}
name = input("姓名:")
age = input("年龄:")
job = input("工作:")
hobble = input("爱好:")

dic["姓名"] = name
dic["年龄"] = age
dic["工作"] = job
dic["爱好"] = hobble

print(dic)
#结果:
{'姓名': '珊宝', '年龄': '7', '工作': '学习', '爱好': '音乐'}

例子:

li = []
for i in range(3):
    dic={}
    name = input("姓名:")
    age = input("年龄:")
    job = input("工作:")
    hobble = input("爱好:")
    dic["姓名"] = name
    dic["年龄"] = age
    dic["工作"] = job
    dic["爱好"] = hobble
    #print(dic)
    li.append(dic)
print(li)
#结果:
[{'姓名': '珊宝', '年龄': '7', '工作': '学习', '爱好': '唱歌'}, {'姓名': '老吴', '年龄': '8', '工作': '学习', '爱好': '听歌'}, {'姓名': '老李', '年龄': '9', '工作': '学习', '爱好': '打游戏'}]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值