【python】数据结构——字典

举报
AXYZdong 发表于 2021/12/25 08:22:02 2021/12/25
【摘要】 Python数据结构——字典。创建字典,增删改查,字典与列表,字典的重要方法。

字典(dictionary),它是由一系列的键值对组合而成的数据结构 。

字典的索引可以使用不同数据类型,不只是整数。字典的索引被称为”键“,键及其关联的值被称为”键-值“对。

字典中的每个键与一个值相关联

  1. 键,必须是可 hash 的值,如字符串,数值等
  2. 值,可以是任意对象

1.创建字典

使用花括号 {} 创建字典。

>>> me = {'name':'axyzdong', 'age':'22'}
>>> me['name']
'axyzdong'
>>> 'My name is '+ me['name']
'My name is axyzdong'

将一个字典赋给 me 变量。这个字典的键值为 ’name‘,’age‘。这些键对应的值分别为 ’axyzdong‘ ,’22‘。可通过它们的键来访问这些值。

字典可以使用整数作为键。

>>> spam = {12345:'Luggage Combinaion', 42:'The Answer'}
>>> spam[42]
'The Answer'

2.字典与列表

与列表不同的是,字典中的表项是不排序的,也就是说字典中的’键-值‘对没有顺序之分。

>>> spam1 = ['a','b','c']
>>> spam2 = ['b','a','c']
>>> spam1 == spam2
False
>>> spam3 = {1:'a', 2:'b', 3:'c'}
>>> spam4 = {2:'b', 1:'a', 3:'c'}
>>> spam3 == spam4
True
>>> 

3.增删改查

查看元素

>>> me = {'name':'axyzdong', 'age':'22'}
>>> me['name']
'axyzdong'

新增元素

>>> me = {}
>>> me['name']='axyzdong'
>>> me['age']='22'
>>> me
{'name': 'axyzdong', 'age': '22'}

修改元素

>>> me = {'name': 'axyzdong', 'age': '22'}
>>> me['age'] = '20'
>>> me
{'name': 'axyzdong', 'age': '20'}

删除元素

>>> spam = {1:'a', 2:'b', 3:'c'}
>>> spam.pop(1)
'a'
>>> spam
{2: 'b', 3: 'c'}
>>> del spam[2]
>>> spam
{3: 'c'}

4.重要方法

  • keys()values()items() 方法

它们返回类似列表的值,分别对应字典的键值、值和键-值对:keys()values()items()。返回的值不是真正的列表,不能被修改。但是这些数据类型(分别是dict_keys、dict_vslues和dict_items)可以用于for循环。

>>> me = {'name': 'axyzdong', 'age': '22'}
>>> for i in me.keys():
	print(i)

name
age
>>> for j in me.values():
	print(j)

axyzdong
22
>>> for k in me.items():
	print(k)

('name', 'axyzdong')
('age', '22')

可以通过 list 函数将返回值转为真正的列表。

>>> me = {'name': 'axyzdong', 'age': '22'}
>>> list(me.keys())
['name', 'age']
>>> list(me.values())
['axyzdong', '22']
>>> list(me.items())
[('name', 'axyzdong'), ('age', '22')]

多重赋值技巧

>>> me = {'name': 'axyzdong', 'age': '22'}
>>> for i,j in me.items():
	print('Key:' + i + ' Value:' + j)

Key:name Value:axyzdong
Key:age Value:22
  • 检查字典中是否存在键、值或键-值对
>>> me = {'name': 'axyzdong', 'age': '22'}
>>> 'name' in me.keys()
True
>>> 'axyzdong' in me.values()
True
>>> ('name','axyzdong') in me.items()
True
  • get() 方法

get() 方法有两个参数,第一个参数:要取得其值的键;第二个参数:如果该键不存在时,返回的备用值。

>>> me = {'name': 'axyzdong', 'age': '22'}
>>> 'My name is ' + me.get('name', 'Li Hua')
'My name is axyzdong'
>>> 'My name is ' + me.get('fiend', 'Li Hua')
'My name is Li Hua'  #当‘friend’键不存在时,返回备用值‘Li Hua’
  • setdefault() 方法

setdefault() 方法有两个参数,第一个参数:要检查的键;第二个参数:如果该键不存在时要设置的值。(如果该键存在,方法就会返回键的值)

me = {'name': 'axyzdong', 'age': '22'}
>>> me.setdefault('hobby','cycling')
'cycling'
>>> me
{'name': 'axyzdong', 'age': '22', 'hobby': 'cycling'}
>>> me.setdefault('name','Li Hua')
'axyzdong'
>>> me
{'name': 'axyzdong', 'age': '22', 'hobby': 'cycling'}

demo:计算输入字符串中每个字符出现的次数。

# -*- coding: utf-8 -*-
# @File : characterCount
# @Author : axyzdong
# @Time : 2021/11/25 21:28
# @Project : demo
message = str(input('message = '))
count = {}
for character in message:
    count.setdefault(character, 0)
    count[character] = count[character]+1

print(count)

交互式窗口输入 my name is axyzdong! ,得到每个字符出现的次数。

message =  my name is axyzdong !
{' ': 5, 'm': 2, 'y': 2, 'n': 2, 'a': 2, 'e': 1, 'i': 1, 's': 1, 'x': 1, 'z': 1, 'd': 1, 'o': 1, 'g': 1, '!': 1}

pprint 模块实现漂亮打印

import pprint
message = str(input('message = '))
count = {}
for character in message:
    count.setdefault(character, 0)
    count[character] = count[character]+1

pprint.pprint(count)

交互式窗口输入 my name is axyzdong !,运行结果如下:

message = my name is axyzdong !
{' ': 4,
 '!': 1,
 'a': 2,
 'd': 1,
 'e': 1,
 'g': 1,
 'i': 1,
 'm': 2,
 'n': 2,
 'o': 1,
 's': 1,
 'x': 1,
 'y': 2,
 'z': 1}

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “收藏” “关注” 一键三连哦!


如果以上内容有任何错误或者不准确的地方,欢迎在下面 👇 留个言。或者你有更好的想法,欢迎一起交流学习~~~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。