Python入坑笔记(四):字典

Author Avatar
Zhu Yuexin Nov 23, 2017

Python中的字典和Java中的集合很类似,字典保存的是一系列键值对(key-value),每个键与一个值关联。字典可存储的容量几乎不受限制,且可将任何Python对象作为字典的值。

简单使用

字典用{ } 包裹,键与值用:分隔,键值对之间用逗号,分隔,如下:

user = {"name" : "Tom", "age" : 20}

访问字典内容

获取与键对应的值,将键放入字典名后的[ ]中:

alien_0 = {"color":"green", "points":5}

print(alien_0["color"])

outputs:

green

修改和添加内容

指定字典名和方括号括起来的键,然后赋值。如果键在字典中已存在,那它对应的值就会被修改;如果键不存在,则新的键值对就会存入字典中:

alien_0 = {"color":"green", "points":5}
#修改color对应的值
alien_0["color"] = "red"
#添加新的键和值
alien_0["name"] = "Tom"

print(alien_0)

outputs:

{'color': 'red', 'points': 5, 'name': 'Tom'}

删除内容

使用del,然后指定字典名和方括号中的键:

alien_0 = {"color":"green", "points":5}
#删除points和它对应的值
del alien_0["points"]

print(alien_0)

outputs:

{'color': 'green'}

Have a try

Question

词汇表 : Python字典可用于模拟现实生活中的字典, 但为避免混淆, 我们将后者称为词汇表。

  • 想出你在前面学过的5个编程词汇, 将它们用作词汇表中的键, 并将它们的含义作为值存储在词汇表中。

  • 以整洁的方式打印每个词汇及其含义。 为此, 你可以先打印词汇, 在它后面加上一个冒号, 再打印词汇的含义; 也可在一行打印词汇, 再使用换行符(\n ) 插入一个空行, 然后在下一行以缩进的方式打印词汇的含义。

Answer

word_dict = {
    "OOP" : "面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构",
    "Polymorphism" : "在面向对象语言中,接口的多种不同的实现方式即为多态",
    "Regular Expression" : "正则表达式,又称规则表达式",
    "binary tree" : "二叉树",
    "zero-shot learning" : "一次学习"
}

choose = input("请输入你要查询的内容:")
result = word_dict[choose]
print(choose+":"+result)

outputs:

请输入你要查询的内容:OOP
OOP:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构

遍历字典

遍历所有的键值对

可以使用字典的items()方法获取字典中所有的键值对:

user = {
    "name" : "Tom",
    "age" : 20,
    "height" : 170,
    "weight" : 60
}
print(user.items())
#转换为list再输出
print(list(user.items()))

outputs:

dict_items([('name', 'Tom'), ('age', 20), ('height', 170), ('weight', 60)])
[('name', 'Tom'), ('age', 20), ('height', 170), ('weight', 60)]

然后可以用for循环,依次获取字典中的键和值:

user = {
    "name" : "Tom",
    "age" : 20,
    "height" : 170,
    "weight" : 60
}

for key,value in user.items():
    print(key+":"+str(value))

outputs:

name:Tom
age:20
height:170
weight:60

遍历所有的键

可以用字典的keys()方法获取字典中所有的键,然后用for循环遍历:

user = {
    "name" : "Tom",
    "age" : 20,
    "height" : 170,
    "weight" : 60
}

for info in user.keys():
    print(info)

outputs:

name
age
height
weight

默认获取到的键的顺序都是不可预测的。如果获取特定顺序的键,可以用sorted()函数来获得按特定顺序排列的键列表的副本:

users = {
    "Tom" : "America",
    "Edward" : "Canada",
    "JackieChan" : "China",
    "Brank" : "British",
}
sorted_names = sorted(users.keys())
print(sorted_names)

outputs:

['Brank', 'Edward', 'JackieChan', 'Tom']

遍历所有的值

如果想获取字典中所有的值,可以用字典的values()方法,获取一个仅包含值的列表。使用set集合还可以剔除其中的重复项,因为集合中的元素都是唯一的。

users = {
    "Tom" : "America",
    "Edward" : "Canada",
    "JackieChan" : "China",
    "Brank" : "British",
    "David" : "British",
}
countries = list(users.values())
print(countries)
#使用set集合剔除重复项
countries_2 = set(users.values())
print(countries_2)

outputs:

['America', 'Canada', 'China', 'British', 'British']
{'British', 'America', 'Canada', 'China'}

嵌套

字典和列表、字典和字典间可以嵌套保存,如下:

  • 字典存放在列表中

    #字典列表
    #创建一个存储外星人的空列表
    aliens = []
    #创建30个绿色的外星人
    for alien_number in range(30):
        new_alien = {"color":"green", "points":5, "speed":"slow"}
        aliens.append(new_alien)
    #显示前三个外星人
    for alien in aliens[:3]:
        print(alien)
    print("Total number of aliens: "+str(len(aliens)))
    

    outputs:

    {'color': 'green', 'points': 5, 'speed': 'slow'}
    {'color': 'green', 'points': 5, 'speed': 'slow'}
    {'color': 'green', 'points': 5, 'speed': 'slow'}
    Total number of aliens: 30
    
  • 字典中存储列表

    #字典中存储列表
    favorite_languages = {
        "jen" : ["python", "ruby"],
        "sarah" : ["c"],
        "edward" : ["ruby", "go"]
    }
    
    for name, languages in favorite_languages.items():
        print(name.title()+"'s favorite languages are:")
        for language in languages:
            print("\t"+language.title())
    

    outputs:

    Jen's favorite languages are:
        Python
        Ruby
    Sarah's favorite languages are:
        C
    Edward's favorite languages are:
        Ruby
        Go
    
  • 字典中存储字典

    #字典中存储字典
    users = {
        'aeinstein' : {
            'first' : 'albert',
            'last' : 'aeinstein',
            'location' : 'princeton'
        },
        'mcurie' : {
            'first' : 'marie',
            'last' : 'curie',
            'location' : 'paris'
        }
    }
    for username, user_info in users.items():
        print("\nUsername: "+username)
        print(user_info['first'].title()+" "+user_info['last'].title()+" lived in "+user_info['location'])
    

    outputs:

    Username: aeinstein
    Albert Aeinstein lived in princeton
    
    Username: mcurie
    Marie Curie lived in paris