【Python】字典

字典

字典转列表

a_dict = {'0': 'person', '1': 'car'}
dict_key = list(a_dict.keys())
dict_value = list(a_dict.values())
key_value = list(a_dict.items())
print(a_dict.keys())
print(dict_value)
print(dict_key)
print(key_value)

## output
dict_keys(['0', '1'])
['person', 'car']
['0', '1']
[('0', 'person'), ('1', 'car')]


#***********************
a_dict = {'0': 'person', '1': 'car'}
# 以列表的形式输出键和值,两种方式
list_values = [value for key, value in a_dict.items()]  
list_keys = [key for key, value in a_dict.items()] 
print(list_values)
print(list_keys)
print('----------------------')
list_values_1 = [value for value in a_dict.values()]
list_keys_1 = [key for key in a_dict.keys()]
print(list_values_1)
print(list_keys_1)

new_dict = {value: key for key, value in a_dict.items()}    # 字典解析,对换字典键值顺序
print(new_dict)
print("********************************")
b4 = sorted(new_dict.items(), key=lambda x: x[0])   # 将字典按key的值进行排序
b5 = sorted(new_dict.keys(), key=lambda x: x[0])    # 给字典的key排序
b6 = sorted(new_dict.values(), key=lambda x: x[0])  # 给字典的value排序
print(b4)
print(b5)
print(b6)
## output
['person', 'car']
['0', '1']
----------------------
['person', 'car']
['0', '1']
{'person': '0', 'car': '1'}
********************************
[('car', '1'), ('person', '0')]
['car', 'person']
['0', '1']

添加键值对

字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值,字典是无序的

alien_0 = {'color': 'green', 'points': 5} 
print(alien_0) 
alien_0['x_position'] = 0 	# 直接添加键值对
alien_0['y_position'] = 25	
print(alien_0)

{'color': 'green', 'points': 5} 
{'color': 'green', 'points': 5, 'y_position': 25, 'x_position': 0}

正如你看到的,我们将一个较大的字典放在了多行中。其中每个键都是一个被调查者的名字,而每个值都是被调查者喜欢的语言。确定需要使用多行来定义字典时,在输入左花 括号后按回车键,再在下一行缩进四个空格,指定第一个键—值对,并在它后面加上一个逗号。此后你再次按回车键时,文本编辑器将自动缩进后续键—值对,且缩进量与第一 个键—值对相同。

定义好字典后,在最后一个键—值对的下一行添加一个右花括号,并缩进四个空格,使其与字典中的键对齐。另外一种不错的做法是在最后一个键—值对后面也加上逗号,为以 后在下一行添加键—值对做好准备:

favorite_languages = { 
'jen': 'python', 
'sarah': 'c', 
'edward': 'ruby', 
'phil': 'python', 
}

删除键值对

对于字典中不再需要的信息,可使用del 语句将相应的键—值对彻底删除。使用del 语句时,必须指定字典名和要删除的键:

alien_0 = {'color': 'green', 'points': 5} 
print(alien_0) 
del alien_0['points'] # 删除键值对
print(alien_0)

{'color': 'green', 'points': 5} 
{'color': 'green'} 

遍历字典

遍历键值对

字典名和方法items() ,它返回一个键—值对列表

user_0 = { 
'username': 'efermi', 
'first': 'enrico', 
'last': 'fermi', 
} 
for key, value in user_0.items():
	#for k, v in user_0.items()
    print("\nKey: " + key) 
    print("Value: " + value
	#注意,即便遍历字典时,键—值对的返回顺序也与存储顺序不同。Python不关心键—值对的存储顺序,而只跟踪键和值之间的关联关系。

遍历所有的键

在不需要使用字典中的值时,方法keys() 很有用

favorite_languages = { 
'jen': 'python', 
'sarah': 'c', 
'edward': 'ruby', 
'phil': 'python', 
} 
#遍历所有的键
#遍历字典时,会默认遍历所有的键,因此,如果将上述代码中的for name in favorite_languages.keys(): 替换为for name in favorite_languages: ,输出 将不变。 如果显式地使用方法keys() 可让代码更容易理解,你可以选择这样做,但如果你愿意,也可省略它。
# for name in favorite_languages: 和for name in favorite_languages.keys(): 等价的
for name in favorite_languages.keys(): 
	print(name.title()) 	# title()方法返回所有单词的第一个字符大写

字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。这不是问题,因为通常你想要的只是获取与键相关联的正确的值。要以特定的顺序返回元素,一种办法是在for 循环中对返回的键进行排序。为此,可使用函数sorted() 来获得按特定顺序排列的键列表的副本

favorite_languages = { 
'jen': 'python', 
'sarah': 'c', 
'edward': 'ruby', 
'phil': 'python', 
} 

for name in sorted(favorite_languages.keys()): 
	print(name.title() + ", thank you for taking the poll.")

遍历所有的值

如果你感兴趣的主要是字典包含的值,可使用方法values() ,它返回一个值列表,而不包含任何键。例如,如果我们想获得一个这样的列表,即其中只包含被调查者选择的各种语言,而不包含被调查者的名字,可以这样做:

favorite_languages = { 
'jen': 'python', 
'sarah': 'c', 
'edward': 'ruby', 
'phil': 'python', 
} 

print("The following languages have been mentioned:") 
#取出的是一个包含所有value的列表,然后再遍历
for language in favorite_languages.values(): 
	print(language.title())

这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合(set),结合类似于列表,但每个元素都必须是独一无二的:

#使用set()把列表转换成集合
for language in set(favorite_languages.values()): 
	print(language.title()) 
d = {'a': 24, 'g': 52, 'i': 12, 'k': 33}
# 以列表形式输出字典d的key
# d.items()为字典d的键值对
b1 = [key for key, value in d.items()]
print(b1)
# 以列表的形式输出字典d的value
b2 = [value for key, value in d.items()]
print(b2)
# 颠倒字典d的key:value位置
b3 = {value: key for key, value in d.items()} # 字典解析
print(b3)

# 将字典d按key的值进行排序,两种方式
b4 = sorted(d.items(), key=lambda x: x[1]) # 将字典d按key的值进行排序
b5 = sorted(d.keys(), key=lambda x: x[1])	#给字典的键排序
print(b4)
b6 = sorted(d.values(), key=lambda x: x[1]) #给字典的value排序

快速对换键和值 (字典解析)

字典解析

# 快速调换字典键值顺序
{v: k for k, v in some_dict.items()} 

字典中get()函数用法

1.get()函数利用键来获取值

常用或者最直接的方式是:

print(dict[key])

但这种方法中当字典中不存在该键时会返回KeyError类型错误,此时就可以用get()函数还利用键获取值 :

print(dict.get(key))

利用get()函数操作时当字典中不存在输入的键时会返回一个None,这样程序运行时就不会出异常

2.利用字典统计列表中元素出现次数

比如现在有这么一个列表,让你统计列表中部分元素出现的次数

ls=['abc','b','c','abc','ad']
a_dict={} #创建一个空字典
for i in ls:
    a_dict[i]=a_dict.get(i,0)+1     #之后称其为get的赋值语句,目的是新建字典键值对,只有首次有效,当循环到第二次时,a_dict.get(i,0)==a_dict.get(i),赋给value的值不再有效
    
    '''
    赋值语句代码等价于
    a_dict[i]=0
    a_dict[i}=a_dict[i]+1
    '''
print(a_dict)
print("---------------------------------")
a_dict.get('abc', 5)
print(a_dict)

## output
{'abc': 2, 'b': 1, 'c': 1, 'ad': 1}
---------------------------------
{'abc': 2, 'b': 1, 'c': 1, 'ad': 1}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XTX_AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值