Python学习入门之字典

Python学习入门之字典

在python中字典是一系列的键值对,能将相关信息关联起来,跟C/C++中的结构体类似。每一个键都与一个值相关联,可以使用键来访问与之相关联的值,与键相关联的值可以是字符串,数字,列表乃至是字典,任何Python中的对象都可用作字典中的值,键与值之间用冒号分阁,而键与值之间用逗号分隔。
一个简单的字典示例

alien_0 = {
    'color': "green",
    'points': 5,
    }
print(alien_0)

访问字典中的值

可依次指定字典名和放在方括号内的键

print(alien_0['color'])
print(alien_0['points'])

添加键-值对

可依次指定字典名、用方括号括起的键和相关的值

alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)

修改字典中的值

可依次指定字典名,用方括号括起的键以及与该键相关联的新值

print("The alien is " + alien_0['color'] + ".")
alien_0['color'] = "yellow"
print("The alien is " + alien_0['color'] + " now.")

删除键—值对

使用del语句将相应的键—值对彻底删除,必须指定字典名和要删除的键

del alien_0['points']
print(alien_0)

遍历字典

遍历所有键-值对,items函数返回一个键-值对列表

user_0 = {
    'username': "efermi",
    'first': "enrico",
    'last': "fermi",
    }

for key,value in user_0.items():
    print("\nKey: " + key)
    print("value: " + value)

遍历字典中的所有键,keys函数以列表返回一个字典所有的键

for key in user_0.keys():
    print("dictionary key:" + key + "\n")

遍历字典中的所有值,values函数以列表返回一个字典所有的值

for value in user_0.values():
    print("dictionary value:" + value + "\n")

嵌套

字典列表

alien_1 = {'color': "yellow",'points': 10}
alien_2 = {'color': "yellow",'points': 15}

alien = [alien_0,alien_1,alien_2]
print(alien)

批量生成字典列表

alien = []
for alien_num in range(10):
    new_alien = {'color': "yellow",'points':alien_num*5}
    alien.append(new_alien)
print(alien)

在字典中存储列表

  pizza = {
        'crust': "thick",
        'toppings': ["mushrooms","extra cheese"]
    }

    print("you ordered a " + pizza['crust'] + "-crust pizza with the following toppings:")
    
    for topping in pizza['toppings']:
        print("\t" + topping)

在字典里存储字典

users = {
    'fz': {
         'first': "feng",
         'last': "zhao",
         'location':'chinese',
        },
    'zr':{
        'first': "zeng",
        'last': "rong",
        'location': "chinese",
        },
    }
for username, user_info in users.items():
    print("\nUsername: " + username)
    full_name=user_info['first']  + " " + user_info['last']
    print("Full name : " + full_name)
    print("Location : " + user_info['location'])

注意事项

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:

>>> d ={'fz': 90}
>>> d['fz']
90
>>> d['fz'] = 88
>>> d['fz']
88

如果key不存在,dict就会报错:

>>> d['Mike']
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'Mike'

要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:

>>> 'Mike' in d
False

二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1

注意:返回None的时候Python的交互环境不显示结果。

要删除一个key,用pop(key)方法,对应的value也会从dict中删除:

>>> d.pop('fz')
75
>>> d
{'Michael': 95, 'Tracy': 85}

请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:

>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unhashable type: 'list'

你可能感兴趣的:(python)