python 字典

在python中字典是一系列的键-值对,它也是python中唯一的映射类型。每个键都与一个值相对应,你可以使用键来访问与之相关联的值。与键相关联的值可以是任何python对象。

定义字典
在python中用放在花括号{}中的一系列键值对来表示,其中键-值是两个相关联的值。指定键是,python将返回与之相关联的值。键和值之间用冒号来分割,而键值对之间则用逗号进行分割。

如下示例:

# python dictionary
st_info = {"name":"zhaosi","age":"18"};
st_info2 = {'name':'zhaosi','age':'18'};

其中键名的定义可以使用单引号也可以使用双引号,不过个人推荐使用单引号,如果我们打印一下这两个字典可以发现其输出是一样的,且都使用了单引号来输出结果。

{'name': 'zhaosi', 'age': '18'}
{'name': 'zhaosi', 'age': '18'}

访问字典
有了字典,我们自然要学会如何去访问其中存储的值了。在python中访问字典中的值是十分简单的,只要通过键名来访问即可。

# python dictionary
st_info = {'name':'zhaosi','age':18};
print("student name is:" + st_info['name']);

输出:

student name is:zhaosi

这里使用键名来访问字典,其语法就是方括号[]里面是键名.

接下来我们试着输出一下年龄,大家也看到了,名字和年龄一个是字符串一个是数字。

print("student age is:" + st_info['age']);

好了,直接访问年龄然后输出年龄信息。我们试着运行程序结果却产生了错误:

Traceback (most recent call last):
  File "D:/Programs/python/HelloWorld/hello_world.py", line 3, in <module>
    print("student age is:" + st_info['age']);
TypeError: must be str, not int

大家可以看到st_info[‘age’]返回的是值得类型,所以有一点请大家注意一下:使用上述访问字典的方式,其返回的值得类型是不一致的,请按照使用情况进行特殊处理。
在这里显然我们将其转化为字符串就ok了。

str(st_info['age'])

还记得吧?

动态添加键值对
字典是一种动态结构,我们可以随时为字典添加新的键值对。

还是上面的例子,我们为该学生信息添加学校和班级的信息。

# python dictionary
st_info = {'name':'zhaosi','age':18};
print(st_info);

# add school info
st_info['school'] = "第一中学";
# add class info
st_info['class'] = 8;

print(st_info);

我们首先定义了一个字典,然后打印字典内容。

{'name': 'zhaosi', 'age': 18}

输出原有字典内容后,我们为字典添加班级信息,然后打印新的字典:

{'name': 'zhaosi', 'age': 18, 'school': '第一中学', 'class': 8}

创建空字典

在很多情况下,我们需要定义一个空的字典,那么在python中怎么定义一个空字典?
在上面我们学习了字典的定义,那么如何定义空字典,想必大家心里有数吧?

很简单,在上面的例子中,我们不要键值对就好了,一句话就一个花括号{}.

empty_dic = {};

修改字典中的值

上面我们看到过如何通过键名来访问字典,修改字典中的值和访问是一样的,同样通过键名获取值,然后重新赋值即可。

st_info = {'name':"zhaosi",'age':18};
# update age
st_info['age'] = 25;
print(st_info);

在代码的最后我们打印一下修改后的字典:

{'name': 'zhaosi', 'age': 25}

删除键值对
增删改查,这对任何数据结构都是必须了解的,那么python中字典该怎么删除我们不需要的键值对呢?

这个可以稍微有点特殊,因为我们需要借用del语句来进行删除,格式是:

del 字典名[键名]

值得注意的是,通过del删除的内容是永久性的删除,不要想着还能找回来哦。

st_info = {'name':"zhaosi",'age':18};
del st_info['age'];
print(st_info);

输出:

{'name': 'zhaosi'}

遍历键值对

提起遍历,首先我们想到的就是循环语句,没错,这里还是使用for循环来遍历字典。

# programming hobbies
favorite_languages = {
    'jen':'java',
    'john':'c',
    'sarah':'c#',
}

for key,value in favorite_languages.items():
    print(key.title() + "`s"
          + "favorite language is:"
          + value);

在这个例子里面我们定义了一个程序语言爱好的字典,然后遍历字典,输出每个人爱好的编程语言。

Jen`sfavorite language is:java
John`sfavorite language is:c
Sarah`sfavorite language is:c#

我们注意一下for循环的语法,其中首先要注意的是favorite_languages.items()语句,其中item方法返回的是键值对信息,

Inferred type: (self: dict) -> ItemsView[_KT, _VT] 
D.items() -> a set-like object providing a view on D's items

如果一不小心我们没有调用这个方法,而是如下使用:

for key,value in favorite_languages:

那么python会毫不客气的告诉你,出错了。

Traceback (most recent call last):
  File "D:/Programs/python/HelloWorld/hello_world.py", line 8, in <module>
    for key,value in favorite_languages:
ValueError: too many values to unpack (expected 2)

这点希望大家可以留意。另外for语句中申明的两个变量key,value分别代表什么,想必大家都清楚。

遍历键值

有些时候,我们只关心字典中的键名,比如上面的例子,我们只想知道到底有哪些人在我们的字典中,那么这个时候我们就可以使用keys()方法来获取所有的键值:

for key in favorite_languages.keys():
    print(key.title() + " is in our dictionary");

当然了,我们还有另外一种格式:

for key in favorite_languages:
    print("#    " + key.title() + " is in our dictionary");

python在遍历字典的时候,默认后遍历所有的键,所以上面两种方式的结果是相同的,不过如果能显示调用keys()能够让我们的代码更加的清楚明了,这点看个人喜好了。

Jen is in our dictionary
John is in our dictionary
Sarah is in our dictionary
#    Jen is in our dictionary
#    John is in our dictionary
#    Sarah is in our dictionary

这里在额外补充一点,那就是对字典进行排序,就拿上面的例子来说,我们希望能够按照名字字母的顺序输出结果,此时我们就得对所有的键进行排序然后顺序输出

# programming hobbies
favorite_languages = {
    'gen':'java',
    'tim':'c',
    'sarah':'c#',
}

for key in sorted(favorite_languages.keys()):
    print(key.title() + " is in our dictionary");

为了能够让程序有一个清楚的变化,我修改了上面的键名,以便排序的效果更为直观:
还记得如果我们不进行排序的话:

Gen is in our dictionary
Tim is in our dictionary
Sarah is in our dictionary

这应该就是我们的理想输出,那么接下来我们看下排序后的结果:

Gen is in our dictionary
Sarah is in our dictionary
Tim is in our dictionary

这里就不介绍sorted()函数了,以前我们提到过。

遍历所有的值

既然有遍历所有键名的方法,那么就一定会有遍历所有值的方法。
还记得我们遍历键的时候使用的是keys()方法吧,那么我们遍历值得时候应该使用的就是values()方法吧。让我们看下我们的猜测是不是对的。

for value in favorite_languages.values():
    print(value.title());

这里我们是输出所有的值,其中我们并没有考虑其中的值是否有重复的。那么输出应该如下:

Java
C
C#

这里我们的字典元素很少,也没有重复的,大家想一下,如果我们有百万条的数据,其中编程语言重复的应该有很多,那么这时候输出的结果必然有大量的无用数据,那么在python中,我们怎么去除这些重复的数据呢?

答案是:使用set(),set可以查找出列表独一无二的元素,然后返回一个新的集合。

# programming hobbies
favorite_languages = {
    'gen':'java',
    'tim':'c',
    'sarah':'c#',
    'sarah2': 'c#',
    'sarah3': 'c#',
}

for value in set(favorite_languages.values()):
    print(value.title());

上面我们添加几条值相同的数据,然后看下输出结果:

C
C#
Java

嵌套

这个概念不应该单独提出来,因为我们在前面说过,字典的值可以是任意类型的,那么自然可以是列表,甚至字典本身。

字典列表
这个很简单,就是列表里面存的是我们今天学习的字典。

student1 = {'name':'wangsan','age':15};
student2 = {'name':'lisi','age':15};
student3 = {'name':'zhaoliu','age':15};

students = [student1,student2,student3];
print(students);

字典中使用列表和字典

话不多说,直接来个例子:

student1 = {'name':'wangsan','age':15};
student2 = {'name':'lisi','age':15};
student3 = {'name':'zhaoliu','age':15};

students = [student1,student2,student3];

all_student = {
    'class':'第一中学',
    'students':students,
}
print(all_student);

想必看到这里,大家应该知道怎么使用这些东西来组成更加复杂的数据了吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值