字典
字典转列表
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}