1.什么是字典

     在Python中有一个将“名字”和“值”进行配对的结果,成为字典。其中也包括了一系列的类似的配对,我们称之为 键值对(key-value pair),这里每个配对的“名字”叫做 键名(key),每个“值”我们称为 键值(value)。

一个python中的键值对的形式为冒号分隔键名和键值的形式,如 键名:键值。

     字典在Python被定义为一系列用{}包裹键值对的集合。取键值时,需要用字典对应的变量名加放在方括号里键名的方式的形式,例如对于

dirt={'key1':100 ,'key2':112 ,...}

的定义,执行

print(dirt['key1'])

将会得到一个对应的100的输出,类似的,我们可以用使用如下方式修改dirt字典中key1键名对应的键值为999。

dirt['key1']=999

可以作为键名的常见数据类型包括了字符串、数值和元组,而键值则可以使任何类型的数值。如果使用了错误的键名,将无法取出正确的键值。

1

2.使用字典

bat = {} 
bat['b'] = '百度'
bat['a'] = '阿里巴巴'
bat['t'] = '腾讯'
print(bat)
print(bat['a'])
bat['a']='亚马逊'
print(bat['a'])
print('b' in bat)
print('x' in bat)

   最后两行是判断某个键值对是否存在。

(六)Python字典与文件_操作符

3.查看字典元素

bat = {'a': '阿里巴巴', 'b': '百度', 't': '腾讯'}
print(bat.keys())
print(bat.values())
print(bat.items())

输出

(六)Python字典与文件_键值_02

如果不想输出dict_keys等字眼可以额外一个list。

bat = {'a': '阿里巴巴', 'b': '百度', 't': '腾讯'}
print(list(bat.keys())
print(list(bat.values())
print(list(bat.items())

4.for循环打印字典

bat = {'a': '阿里巴巴', 'b': '百度', 't': '腾讯'}
for value in bat.values():
print(value)
for key in bat:
print(key)
for k,v in bat.items():
print(k,'>',v)

最后一个for是访问了bat.items()这个列表中的每一个元组元素,并且让他们在循环中被赋给临时的k和v变量,按照结果输出。

5.字典数据格式化

boss = {} 
boss['name'] = 'robin'
boss['age'] = 45
boss['height'] = 1.78
print('The boss named %(name)s is %(age)d-year-old and %(height)g tall.' % boss)

输出  The boss named robin is 45-year-old and 1.78 tall. 

与之前的字符串格式化相同,每一个占位符的%与类型标识字母前都有一个圆括号,里面填键名。

6.删除表达式

num = 6
list = ['a', 'b', 'c', 'd']
dict = {'a': 1, 'b': 2, 'c': 3}
del list[0]
del list[-2:]
print(list)
del dict['b']
print(dict)
del num
print(num)

结果

(六)Python字典与文件_python_03

7.字典的操作

8.文件的使用

   在Python有一个open函数,这个函数会返回一个用于读出和写入文件的 文件操作符(file descriptor)。我们可以通过

fd=open('filename','r')

打开一个文件名为filename的文件获取它的文件操作符,并让变量fd指向这个操作符(此处的r标记文件被打开用于读取)。

当我们用完该文件不再继续使用时,可以用fd.close()结束对文件的使用。

除了用r来标记读取,还可以用w表示读入(或者用a表示向后继续添加),这些标记可以被放在一起使用,比如我们如果写

fd=open('filename','rw')

则表示对这个文件会有读操作,也会有写操作。

我们可以用for读取一个文件的每一行(仅对文件读取有效,对二进制读取并不能用)。

# 按行输出整个文件
f=open('filename','rU')
for line in f: #访问文件的每一行
print(line,end=' ') #打印每一行,end=' '可以确保不添加换行

每次读取一行的好处在于我们不会受到内存的限制,即我们可以每次只把文件的一部分放到内存进行处理,而不会需要一次性完整加载大块头的文件到内存,这样对于一个1T的文件,可以优雅对1T进行处理,毕竟很难找到一个1T的内存。

    可以通过调用文件操作符的函数readline(写成fd.readline()),它会一次性加载完整的文件到内存,让文件的每一行作为它这个列表结果的每一个字符串元素。文件操作符的函数read(写成fd.read)则会一次性将完整文件作为一个字符串读入到内存中,但是这两种方式往往是在处理大文件的时候会遇到内存无法完整存下内容的问题。

   对于向文件中的写入,我们可以用write函数(写成fd.write(字符串))将指定的字符串写入到打开的文件中。

9.文件与编码

   在Python中有一些已经写好的功能性的“包”成为模组(module)。其中有一个名为codecs的模组,它提供了读取一个非英文的文件所需要的unicode读取支持。

当我们使用它是,需要先通过import将它引入,之后在打开文件时,标记明确所需要使用的编码字符集(在这里我们使用utf-8)。

import codecs
fd=codecs.open('foo.txt','rU','utf-8')

当读取完,并且成功完成相关处理后,我们需要注意,只可以用fd.write()形式进行写出。

10.正确的开发习惯

(六)Python字典与文件_python_04

注意第二条是错误的。

11.两数之和

(六)Python字典与文件_操作符_05

样例输入

3
5 75 25
100

样例输出

2 3

代码如下:

n=int(input())
num=[int(i) for i in input().split()]
target=int(input())
l=len(num)
for i in range(l):
for j in range(l):
if num[i]+num[j]==target:
if i<j:
print(i+1,j+1)

12.统计字符个数

(六)Python字典与文件_操作符_06

s=input()
zimu=0
num=0
space=0
other=0
for i in s:
if 'z'>=i>='a' or 'Z'>=i>='A':
zimu+=1
elif '9'>=i>='0':
num+=1
elif i==' ':
space+=1
else:
other+=1
print(zimu,num,space,other)