首页 > 编程语言 >python 映射类型 dict

python 映射类型 dict

时间:2024-05-10 11:01:45浏览次数:22  
标签:输出 apple 映射 python dict print banana 字典

dict 定义

字典(Dict)是一种用于存储键-值对数据的数据结构。字典使用花括号{}来创建,每个键值对之间使用冒号:分隔。可变的、无序的、key不重复。

dict 的特点

键值对存储:字典是由键值对构成的集合,每个键值对之间使用冒号(:)分隔,键和值之间使用逗号分隔,所有键都是唯一的。
无序性:字典中的键值对是无序存储的,不会按照插入顺序排列。
可变性:字典是可变的,可以进行添加、修改和删除操作。
键的不可变性:字典中的键必须是不可变的,值可以是任意对象。

dict 初始化

dict()是一个内置函数,用于创建字典对象。
可以通过传递关键字参数或其他可迭代对象来创建字典。
关键字参数的写法是 key1=value1, key2=value2, ...,或者传递关键字参数的元组列表或字典。
# 使用关键字参数创建字典
my_dict1 = dict(name='Alice', age=30, city='New York')
print(my_dict1)  # 输出: {'name': 'Alice', 'age': 30, 'city': 'New York'}

# 使用元组列表创建字典
tuple_list = [('name', 'Bob'), ('age', 25), ('city', 'Los Angeles')]
my_dict2 = dict(tuple_list)
print(my_dict2)  # 输出: {'name': 'Bob', 'age': 25, 'city': 'Los Angeles'}

# 使用字典推导式创建字典
keys = ['name', 'age', 'city']
values = ['Dan', 40, 'London']
my_dict3 = {k: v for k, v in zip(keys, values)}
print(my_dict3)  # 输出: {'name': 'Dan', 'age': 40, 'city': 'London'}

# 使用关键字参数和默认值创建字典
default_values = ['default_name', 'default_age', 'default_city']
my_dict4 = dict.fromkeys(['name', 'age', 'city'], default_values)
print(my_dict4)  # 输出: {'name': ['default_name', 'default_age', 'default_city'], 'age': ['default_name', 'default_age', 'default_city'], 'city': ['default_name', 'default_age', 'default_city']}

字典元素的访问

[]:使用方括号 [] 加上键名来访问对应的值。如果键不存在,Python会抛出一个 KeyError。
get():这种方法可以避免抛出 KeyError,如果键不存在,可以返回一个默认值。
setdefault():如果键不存在于字典中,setdefault() 会添加键并将值设为默认值。如果键已存在,返回其对应的值。
# []
d = {'apple': 1, 'banana': 2}
print(d['apple'])  # 输出 1

# get()
d = {'apple': 1, 'banana': 2}
print(d.get('apple', 'Not Found'))  # 输出 1
print(d.get('cherry', 'Not Found'))  # 输出 'Not Found'

# setdefault()
d = {'apple': 1, 'banana': 2}
print(d.setdefault('apple', 3))  # 输出 1,因为键已存在
print(d.setdefault('cherry', 3))  # 输出 3,并添加 'cherry': 3 到字典
print(d)            # 输出: {'apple': 1, 'banana': 2, 'cherry': 3}

dict 元素增加修改

d[key] = value:将key对应的值修改为value。key不存在添加新的kv对。
update([other]) -> None:使用另一个字典的kv对更新本字典。key不存在,就添加。key存在,覆盖已经存在的key对应的值。就地修改。
# []
d = {'apple': 1, 'banana': 2}
d['cherry'] = 3  # 增加新的键值对
print(d)  # 输出 {'apple': 1, 'banana': 2, 'cherry': 3}

# 修改
d = {'apple': 1, 'banana': 2}
d['banana'] = 5  # 修改已存在的键 'banana' 的值
print(d)  # 输出 {'apple': 1, 'banana': 5}

# 使用 update() 方法
d = {'apple': 1, 'banana': 2}
d.update({'banana': 5, 'cherry': 3})  # 更新 'banana' 和增加 'cherry'
print(d)  # 输出 {'apple': 1, 'banana': 5, 'cherry': 3}

# 使用元组列表来更新
d.update([('mango', 4), ('banana', 6)])
print(d)  # 输出 {'apple': 1, 'banana': 6, 'cherry': 3, 'mango': 4}

dict 元素删除

del: 使用 del 可以删除字典中特定的键值对。如果尝试删除不存在的键,将会引发 KeyError。
pop(): pop() 方法用于删除字典中的特定项,并返回该项的值。如果键不存在,并且没有提供默认值,也会引发 KeyError。
clear(): 如果你想删除字典中的所有项,可以使用 clear() 方法。这会移除字典中的所有键值对,留下一个空字典。
popitem(): 这种方法主要用于在遍历字典时逐个删除项,或者当你需要随机移除字典中的元素而不必使用额外的库或函数。
# 使用 del 语句
d = {'apple': 1, 'banana': 2, 'cherry': 3}
del d['banana']  # 删除键 'banana' 及其对应的值
print(d)  # 输出 {'apple': 1, 'cherry': 3}

# 使用 pop() 方法
d = {'apple': 1, 'banana': 2, 'cherry': 3}
value = d.pop('banana')  # 删除 'banana' 并返回其值
print(value)  # 输出 2
print(d)  # 输出 {'apple': 1, 'cherry': 3}

value = d.pop('mango', 'Not Found')  # 尝试删除 'mango',返回 'Not Found'
print(value)  # 输出 'Not Found'

# 使用 clear() 方法
d = {'apple': 1, 'banana': 2, 'cherry': 3}
d.clear()  # 清空字典
print(d)  # 输出 {}
d = {'apple': 1, 'banana': 2, 'cherry': 3}

# 移除最后一个键值对
item = d.popitem()
print(item)  # 输出 ('cherry', 3)
print(d)     # 输出 {'apple': 1, 'banana': 2}

# 再次移除最后一个键值对
item = d.popitem()
print(item)  # 输出 ('banana', 2)
print(d)     # 输出 {'apple': 1}

# 最后一次使用 popitem()
item = d.popitem()
print(item)  # 输出 ('apple', 1)
print(d)     # 输出 {}

# 如果再次尝试 popitem(),字典已为空,将抛出 KeyError
try:
    d.popitem()
except KeyError:
    print("Error: The dictionary is empty.")

dict 遍历

遍历字典

# 遍历所有键
d = {'apple': 1, 'banana': 2, 'cherry': 3}
for key in d:
    print(key, d[key])
# 输出:apple 1 banana 2 cherry 3

# 遍历字典的值
my_dict = {"name": "Alice", "age": 30, "city": "New York"}
for value in my_dict.values():
    print(value)
# 输出:Alice 30 New York

# 遍历所有键和值
for key, value in d.items():
    print(key, value)
# 输出:apple 1 banana 2 cherry 3

# 使用 enumerate 遍历字典的键值对
my_dict = {"name": "Alice", "age": 30, "city": "New York"}
for index, (key, value) in enumerate(my_dict.items()):
    print(f"Index {index}: Key: {key}, Value: {value}")
# 输出:Index 0: Key: name, Value: Alice Index 1: Key: age, Value: 30 Index 2: Key: city, Value: New York

在遍历中删除元素

# 使用列表的副本来遍历键:
d = {'apple': 1, 'banana': 2, 'cherry': 3}
for key in list(d.keys()):  # 使用 keys() 的列表副本
    if d[key] > 1:
        del d[key]
print(d)  # 输出 {'apple': 1}

# 使用 items() 方法并复制
for key, value in list(d.items()):  # 使用 items() 的列表副本
    if value > 1:
        del d[key]
print(d)  # 输出 {'apple': 1}

# 通过 popitem() 方法遍历和修改
d = {'apple': 1, 'banana': 2, 'cherry': 3}
while d:
    key, value = d.popitem()
    print(f'Removed {key} with value {value}')  # 输出:Removed cherry with value 3  Removed banana with value 2  Removed apple with value 1
    # 可以根据需要添加更多逻辑
print(d)  # 输出空字典 {}

defaultdict

defaultdict 是 collections 模块提供的一种字典子类,它可以设定默认值类型,当访问不存在的键时,会自动创建对应类型的默认值,而不会引发 KeyError 异常。

defaultdict 的特点 

设定默认值类型:通过指定一个默认的工厂函数,defaultdict 允许在访问缺失键时自动创建该类型的默认值。
无需手动检查键是否存在:使用 defaultdict 可以避免手动检查键是否存在,简化代码逻辑。
方便的默认值初始化:在处理频繁的键值访问时,defaultdict 可以减少代码量,并且使得代码更加清晰和高效。

defaultdict 的初始化

# 创建一个 defaultdict,默认值类型为列表
from collections import defaultdict

num_dict = defaultdict(list)
num_dict['odd'].append(1)
num_dict['even'].append(2)
num_dict['odd'].append(3)

print(num_dict)  # 输出: defaultdict(<class 'list'>, {'odd': [1, 3], 'even': [2]})

# 创建一个 defaultdict,默认值类型为 int
from collections import defaultdict

count_dict = defaultdict(int)
days = ['Mon', 'Tue', 'Wed', 'Thu']

for day in days:
    count_dict[day] += 1

print(count_dict)  # 输出: defaultdict(<class 'int'>, {'Mon': 1, 'Tue': 1, 'Wed': 1, 'Thu': 1})

from collections import defaultdict

# 创建一个 defaultdict,默认值类型为 lambda 函数
char_dict = defaultdict(lambda: 'Unknown')
char_dict['a'] = 'Apple'
char_dict['b'] = 'Banana'

print(char_dict['c'])   # 输出: Unknown,自动创建默认值
print(char_dict)  # 输出: defaultdict(<function <lambda> at 0x000001A285C067A0>, {'a': 'Apple', 'b': 'Banana', 'c': 'Unknown'})

defaultdict 使用示例

# 计数器
from collections import defaultdict

counter = defaultdict(int)
words = ["apple", "banana", "apple", "orange", "banana", "apple"]
for word in words:
    counter[word] += 1

print(counter)  # 输出: defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})

# 多值映射
from collections import defaultdict

multi_dict = defaultdict(list)

multi_dict["fruits"].append("apple")
multi_dict["fruits"].append("banana")
multi_dict["vegetables"].append("carrot")

print(multi_dict)  # 输出: defaultdict(<class 'list'>, {'fruits': ['apple', 'banana'], 'vegetables': ['carrot']})

# 分组
from collections import defaultdict

grouped_data = defaultdict(list)
records = [("John", "Apple"), ("Anna", "Banana"), ("John", "Banana"), ("Anna", "Apple")]
for name, fruit in records:
    grouped_data[name].append(fruit)

print(grouped_data)  # 输出: defaultdict(<class 'list'>, {'John': ['Apple', 'Banana'], 'Anna': ['Banana', 'Apple']})

OrderedDict

OrderedDict 是 collections 模块提供的一个有序字典(Ordered Dictionary),它会记住元素插入的顺序,因此迭代它时会按照元素插入的顺序进行。

OrderedDict 的特点

保持顺序:OrderedDict 跟踪键值对的插入顺序,允许按照添加顺序迭代键值对。
重新排序功能:OrderedDict 提供了重新排序的方法,例如 move_to_end 和 popitem,这些方法可以用来改变或者维护键的顺序。
适用场景:当需要按照插入顺序遍历字典中的元素时,或者需要在保存键值对时保持固定顺序时,OrderedDict 特别有用。

OrderedDict 初始化

可以通过将一个键值对列表传递给 OrderedDict 的构造器来初始化它,或者使用关键字参数。
from collections import OrderedDict

# 通过列表初始化
items = [("apple", 1), ("banana", 2)]
ordered_dict = OrderedDict(items)
print(ordered_dict)    # 输出: OrderedDict([('apple', 1), ('banana', 2)])

# 通过关键字参数初始化
ordered_dict = OrderedDict(apple=1, banana=2)
print(ordered_dict)    # 输出: OrderedDict([('apple', 1), ('banana', 2)])

OrderedDict 的示例

# 添加元素,并显示元素保持插入顺序
from collections import OrderedDict

ordered_dict = OrderedDict()
ordered_dict["apple"] = 1
ordered_dict["banana"] = 2
ordered_dict["orange"] = 3

for key, value in ordered_dict.items():
    print(key, value)
# 输出: apple 1, banana 2, orange 3

# 移动元素到末尾
from collections import OrderedDict

ordered_dict = OrderedDict(apple=1, banana=2, orange=3)
print("Original:", ordered_dict)   # 输出: Original: OrderedDict([('apple', 1), ('banana', 2), ('orange', 3)])

ordered_dict.move_to_end('banana')
print("After moving banana to end:", ordered_dict)    # 输出: After moving banana to end: OrderedDict([('apple', 1), ('orange', 3), ('banana', 2)])

# 使用 popitem。popitem 方法类似于普通字典的 popitem,但是可以控制弹出的是最后还是最先插入的项:
from collections import OrderedDict

ordered_dict = OrderedDict(apple=1, banana=2, orange=3)
print("Original:", ordered_dict)   # 输出: Original: OrderedDict([('apple', 1), ('banana', 2), ('orange', 3)])

# 弹出最后一个元素
last_item = ordered_dict.popitem()
print("Popped last item:", last_item)  # 输出: Popped last item: ('orange', 3)
print("After popping last item:", ordered_dict)   # 输出: After popping last item: OrderedDict([('apple', 1), ('banana', 2)])

# 弹出第一个元素
first_item = ordered_dict.popitem(last=False)
print("Popped first item:", first_item)    # 输出: Popped first item: ('apple', 1)
print("After popping first item:", ordered_dict) # 输出: After popping first item: OrderedDict([('banana', 2)])

参考文档

https://docs.python.org/zh-cn/3.12/library/stdtypes.html#/mapping-types-dict

标签:输出,apple,映射,python,dict,print,banana,字典
From: https://www.cnblogs.com/wangguishe/p/18138638

相关文章

  • python教程8-页面爬虫
    python爬虫常用requests和beautifulSoup这2个第三方模块。需要先进行手动安装。requests负责下载页面数据,beautifulSoup负责解析页面标签。关于beautifulSoup的api使用,详见api页面:https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/#find-all豆瓣评论中邮箱数据爬取案例:imp......
  • 微信电脑文件清理python程序
    importos,refromitertoolsimportcombinations#两两组合defcombinations_iterative(elements):returnlist(combinations(elements,2))#将按照字符串长度升序排列defsort_by_length(lst):#定义一个自定义排序函数,按字符串长度排序deflength_sort(it......
  • 详解Python 中可视化数据分析工作流程
    本文分享自华为云社区《Python可视化数据分析从数据获取到洞见发现的全面指南》,作者:柠檬味拥抱。在数据科学和分析的领域中,可视化是一种强大的工具,能够帮助我们理解数据、发现模式,并得出洞见。Python提供了丰富的库和工具,使得可视化数据分析工作流程变得高效而灵活。本文将介绍......
  • Python进阶之面向对象编程
    【一】人狗大战小游戏【1】游戏前提分析人可以打狗,狗掉血,狗可以咬人,人掉血人的属性有名字、年龄、伤害、血量、类型狗的属性有名字、年龄、伤害、血量、类型【2】游戏实现(1)定义人和狗的属性#【1】用字典定义,代码较冗余dog1={'name':'狗蛋','d_type':'中......
  • python 基础习题 for循环
    1.用for循环打印出从1到10的所有整数,输出如下:12345678910  2.  声明如下变量:aString='Python'..........#请补齐以上省略号处的for循环语句,使得输出结果是:当前字母:P当前字母:y当前字母:t当前字母:h当前字母:o当前字母:n 最好用两种方法,一个使用不......
  • ROS话题通讯编写发布者(publisher)与订阅者(subscriber) Python
    学习参考:ROS/Tutorials/WritingPublisherSubscriber(python)-ROSWiki本文主要为了加强学习记忆,不是供人参考学习,如果想要学习点击链接系统学习; 在自己创建的工作空间下的src目录下创建一个新的功能包,在功能包中创建scripts文件夹,在内部放置.py源码; 下面剖析发布者源码......
  • 学习python步骤
    参考链接:https://zhuanlan.zhihu.com/p/693208513一、Python基础学习Python语言基础的路线可以分为以下几个阶段:Python3入门:了解Python3的安装方法、如何运行Python程序以及交互模式的使用,同时学习注释的添加方法。数据类型:掌握Python中的各种数据类型,包括数字、布尔值、......
  • PyCharm编辑器结合Black插件,轻松实现Python代码格式化
    1、简介使用Black对Python代码进行格式化,可使代码看起来更美观。但是,随着项目规模不断变大,对每个文件运行Black变得很繁琐。能否在文件保存后立即运行Black呢?本文就来介绍在PyCharm中实现这一目标的方法。2、安装Black首先,在虚拟环境中安装Black。$pipinstallblack ......
  • python教程6.6-发送邮件smtplib
    实现步骤: Python对SMTP⽀持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件,它对smtp协议进⾏了简单的封装。简单代码示例:发送html格式的邮件:在html中插入图片: ......
  • python学习----谁在说谎逻辑运算
    if__name__=='__main__':Li=[0,1]forainLi:forbinLi:forcinLi:zhang=(b==0)li=(c==0)wang=(a+b==0)if(zhang+li+wang==2anda+b+c=......