Python字典
1. 字典类型的基本概念
>>>Dcountry={"中国":"北京", "美国":"华盛顿", "法国":"巴黎"}
>>>print(Dcountry)
{'中国': '北京', '法国': '巴黎', '美国': '华盛顿'}
字典打印出来的顺序与创建之初的顺序不同 ,这不是错误。字典是集合类型的延续 ,各个元素并没有顺序之分。如果想保持一个集合中元素的顺序,需要使用列表,而不是字典。
字典最主要的用法是查找与特定键相对应的值,这通过索引符号来实现。
>>>Dcountry["中国"]
'北京'
一般来说 ,字典中键值对的访问模式如下 ,采用中括号格式: <值> = <字典变量>[<键>]
字典中对某个键值的修改可以通过中括号的访问和赋值实现:
>>>Dcountry["中国"]='大北京'
>>>print(Dcountry)
{'中国': '大北京', '法国': '巴黎', '美国': '华盛顿'}
2. 字典键的特性
字典值可以是任何的 Python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住;
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。
3. 字典类型的操作
通过中括号可以增加新的元素
>>>Dcountry={"中国":"北京", "美国":"华盛顿", "法国":"巴黎"}
>>>Dcountry["英国"]="伦敦"
>>>print(Dcountry)
{'中国': '北京', '法国': '巴黎','美国': '华盛顿', '英国': '伦敦'}
直接使用大括号( {} )可以创建一个空的字典 ,并通过 中括号( [] )向其增加元素。
>>>Dp={}
>>>Dp['2^10']=1024
>>>print(Dp)
{'2^10': 1024}
函数和方法 | 描述 |
<d>.keys() | 返回所有的键信息 |
<d>.values() | 返回所有的值信息 |
<d>.items() | 返回所有的键值对 |
<d>.get(<key>,<default>) | 键存在则返回相应值,否则返回默认值 |
<d>.pop(<key>,<default>) | 键存在则返回相应值,同时删除键值对,否则返回默认值 |
<d>.popitem() | 随机从字典中取出一个键值对,以元组(key, value) 形式返回 |
<d>.clear() | 删除所有的键值对 |
del <d>[<key>] | 删除字典中某一个键值对 |
<key> in <d> | 如果键在字典中返回True,否则返回False |
>>> Dcountry= { " 中国 ":" 北京 ", " 美国 ":" 华盛顿 ", " 法国 ":" 巴黎 " }>>>Dcountry.keys()dict_keys([' 中国 ', ' 美国 ', ' 法国 '])>>>list(Dcountry.values())[' 北京 ', ' 华盛顿 ', ' 巴黎 ']>>>Dcountry.items()dict_items([(' 中国 ', ' 北京 '), (' 美国 ', ' 华盛顿 '), (' 法国 ', ' 巴黎')])>>> ' 中国 ' in Dc ountry # 只对键进行判断True>>>Dcountry.ge t(' 美国 ', ' 悉尼 ') #' 美国 ' 在字典中存在' 华盛顿 '>>>Dcountry.ge t(' 澳大利亚 ', ' 悉尼 ') #' 澳大利亚 ' 在字典中不存在'悉尼 '
与其他组合类型一样 ,字典可以通过for… in语句对其元 素进行遍历 ,基本语法结构如下:
for <变量名> in <字典名>:
语句块
>>>for key in Dcountry:
print(key)
中国
美国
法国
4. 总结
字典是实现键值对映射的数据结构 ,请理解如下基本原则:
- 1.字典是一个键值对的集合,该集合以键为索引,一个键信息只对应一个值信息;
- 2.字典中元素以键信息为索引访问;
- 3.字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。
5. 练习题
1.已知如下5个学生的成绩: “Jack”:67, “May”:89, “Rose”:56, “June”:90, “Black”:88 直接用字典存储 编程实现成绩查询:输入姓名,输出成绩,若姓名不存在,则输出“No found!”
参考代码:
# coding=utf-8
dit = {"Jack": 67, "May": 89, "Rose": 56, "June": 90, "Black": 88}
name = input("输入姓名:")
for key in dit:
if key == name:
print(key, dit[key])
break
else:
print("No found!")
2.输入5个人的电话到通讯录,输入格式为每人占一行,名字和电话号码空格隔开,如:
马云 15093488129
张晓 19282937665
……
然后进行查询:输入姓名,输出该人的联系电话,若姓名不存在,则输出“查无此人”
参考代码
# coding=utf-8
dit = {}
for i in range(5):
s = input().split()
dit[s[0]] = s[1]
name = input("输入姓名:")
for key in dit:
if key == name:
print(key, dit[key])
break
else:
print("No found!")
#测试用例
# 张三 15093488127
# 李四 19282937668
# 王五 17562717052
# 黄六 18864722537
# 牛八 15064775097
输出结果:
3.统计票数 :班委会选举。输入全班人数n,每人投一票,票面为候选人姓名(Tom、Jerry、 May),姓名如果不存在,则选票作废。统计各候选人得票数,并输出结果。
参考代码:
# coding=utf-8
n = eval(input("输入全班人数:"))
dit = {"Tom": 0, "Jerry": 0, "May": 0}
i = 0
for i in range(n):
name = input()
if name in dit:
dit[name] += 1
print("------------运行结果------------")
{print(key, dit[key]) for key in dit}
# 测试用例:
'''
5
Tom
Jerry
Tom
May
March
'''
运行结果:
4.输入一串字符串,统计各个字符出现的次数
参考代码:
# coding=utf-8
s = input("输入字符串:")
dit = {}
print(s)
for x in s:
dit[x] = dit.get(x, 0)+1
print("------------运行结果------------")
{print(key, dit[key]) for key in dit}
'''
测试用例:abczxcasdfg
'''
实例运行结果: