Skip to content

Files

Latest commit

03035da · Jan 9, 2022

History

History
368 lines (236 loc) · 10.1 KB

07.md

File metadata and controls

368 lines (236 loc) · 10.1 KB

七、字典

Python 中的另一种数据类型是字典。字典保存键值对,称为项。你会听到字典以不同的方式被引用,包括:关联数组、散列或散列表。

字典是使用用花括号括起来的逗号分隔的项目生成的。该项以一个键开始,后跟一个冒号,以一个值结束。模式为dictionary_name = {key_1: value_1, key_N: value_N}。要创建空字典,请使用dictionary_name = {}

字典中的任何项目都可以通过键来检索。为此,请将关键字放在紧接字典名称后面的括号中。模式为dictionary_name[key]

代码清单 188

            contacts = {'David': '555-0123', 'Tom': '555-5678'}
            davids_phone = contacts['David']
            toms_phone = contacts['Tom']

            print('Dial {} to call David.'.format(davids_phone))
            print('Dial {} to call Tom.'.format(toms_phone))

输出:

代码清单 189

            Dial 555-0123 to call David.
            Dial 555-5678 to call Tom.

您不仅可以按键访问值,还可以按键设置值。模式为dictionary_name[key] = value

            Contacts = {'David': '555-0123', 'Tom': '555-5678'}
            contacts['David'] = '555-0000'
            davids_phone = contacts['David']
            print('Dial {} to call David.'.format(davids_phone))

输出:

代码清单 190

            Dial 555-0000 to call David.

向词典添加项目

请记住,通过赋值的过程,您可以轻松地将新项目添加到字典中。这个的模式是dictionary_name[new_key] = value。为了确定字典中的项数,首先使用len()内置函数并传入字典。

代码清单 191

            contacts = {'David': '555-0123', 'Tom': '555-5678'}
            contacts['Nora'] = '555-2413'
            print(contacts)
            print(len(contacts))

输出:

代码清单 192

            {'Nora': '555-2413', 'Tom': '555-5678', 'David': '555-0123'}
            3

从字典中移除项目

要从字典中删除一个项目,请使用del语句。图案为del dictionary_name[key]

代码清单 193

            contacts = {'David': '555-0123', 'Tom': '555-5678'}
            del contacts['David']
            print(contacts)

输出:

代码清单 194

            {'Tom': '555-5678'}

请记住,字典中的值不必是相同的数据类型。在下面的例子中,你会看到David键的值是一个列表,而Tom键的值是一个字符串。

代码清单 195

            contacts = {
               'David': ['555-0123', '555-0000'],
               'Tom': '555-5678'
            }
            print('David:')
            print(contacts['David'])
            print('Tom:')
            print(contacts['Tom'])

输出:

代码清单 196

            David:
            ['555-0123', '555-0000']
            Tom:
            555-5678

当您将项目分配给contacts字典时,您可以使用额外的空格,因为这将大大提高可读性

由于dictionary_name(‘key_name’)能够存储它的相关值,你可以像处理实际值一样处理它。为了说明这一点,让我们对大卫的所有电话号码使用for循环。

代码清单 197

            contacts = {
               'David': ['555-0123', '555-0000'],
               'Tom': '555-5678'
            }

            for number in contacts['David']:
               print('Phone: {}'.format(number))

输出:

代码清单 198

            Phone: 555-0123
            Phone: 555-0000

在字典中查找关键字

如果您想知道某个键是否存在于字典中,请使用value in dictionary_name.keys()语法。如果该值实际上是字典中的一个键,将返回True。如果不是,那么False将会被归还。

代码清单 199

            contacts = {
               'David': ['555-0123', '555-0000'],
               'Tom': '555-5678'
            }

            if 'David' in contacts.keys():
               print("David's phone number is:")
               print(contacts['David'][0])

            if 'Nora' in contacts.keys():
               print("Nora's phone number is:")
               print(contacts['Nora'][0])

输出:

代码清单 200

            David's phone number is:
            555-0123

请注意'David' in contacts的计算结果为True,因此将执行跟随if语句的代码块。由于'Nora' in contacts的计算结果为False,该语句之后的代码块将不会执行。另外,由于contacts['David']有一个列表,你可以把它作为一个列表来执行。相应地,contacts['David'][0]将返回列表中的第一个值。

在字典中查找值

使用values()字典方法返回字典中的值列表。使用value in list语法确定列表中是否实际存在该值。如果值在列表中,将返回True。否则False将被退回。

代码清单 201

            contacts = {
               'David': ['555-0123', '555-0000'],
               'Tom': '555-5678'
            }

            print ('555-5678' in contacts.values())

输出:

代码清单 202

            True

在字典中循环

如果你想遍历字典中的条目,你可以使用的一种模式是for key_variable in dictionary_name:for语句之后的代码块将对字典中列出的每个项目执行。要访问for循环中项目的值,请使用dictionary_name[key_variable]模式。与列表不同,字典是无序的。for循环将确保字典中的所有项目都将被处理;但是,绝对不能保证它们会按照您想要的顺序进行处理。

使用复数名词来命名字典是一种常见的做法,例如在联系人的情况下。for循环的标准模式将使用字典名称的单数形式作为关键变量。比如for contact in contacts或者for person in people

代码清单 203

            contacts = {
               'David': '555-0123',
               'Tom': '555-5678'
            }
            for contact in contacts:
               print('The number for {0} is {1}.'.format(contact, contacts[contact]))

输出:

代码清单 204

            The number for Tom is 555-5678.
            The number for David is 555-0123.

在定义for循环时,您也可以选择使用两个变量来处理字典中的项目。第一个变量包含键,第二个变量包含值。图案为for key_variable, value_variable in dictionary_name.items():

代码清单 205

            contacts = {'David': '555-0123', 'Tom': '555-5678'}
            for person, phone_number in contacts.items():
               print('The number for {0} is {1}.'.format(person, phone_number))

输出:

代码清单 206

            The number for Tom is 555-5678.
            The number for David is 555-0123.

嵌套词典

因为字典中包含的值可以是任何数据类型,所以您可以嵌套字典。在下面的例子中,名称是contacts字典的键,而phoneemail是嵌套字典中使用的键。此联系人列表中的每个人都有电话号码和电子邮件地址。如果你想知道大卫的电子邮件地址,你可以使用contacts['David']['email']检索该信息。

确保密切注意冒号、引号、逗号和大括号的位置。在对这些类型的数据结构进行编码时,请尝试使用额外的空白来帮助直观地表示数据结构。

代码清单 207

            contacts = {
               'David': {
                   'phone': '555-0123',
                   'email': 'david@gmail.com'
               },
               'Tom': {
                   'phone': '555-5678',
                   'email': 'tom@gmail.com'
               }
            }

            for contact in contacts:
               print("{}'s contact info:".format(contact))
               print(contacts[contact]['phone'])
               print(contacts[contact]['email'])

输出:

代码清单 208

            Tom's contact info:
            555-5678
            tom@gmail.com
            David's contact info:
            555-0123
            david@gmail.com

审核

字典保存键值对,称为项目。Dictionary_name = {key_1: value_1, key_N: value_N}

密钥允许您访问存储在字典中的值。Dictionary_name[key]

赋值允许您在字典中添加或更改值。Dictionary_name[key] = value

del语句从字典中删除条目。Del dictionary_name[key]

要确定某个关键字是否存在于字典中,请使用value in dictionary_name语法,该语法将返回一个布尔值。

values()字典方法将返回存储在该字典中的值的列表。

使用for key_variable in dictionary_name:语法遍历字典。

字典值可以由任何数据类型组成,包括其他字典。

练习

有趣的事实

试着创建一个字典,里面有一个人的列表,并包括每个人的一个有趣的事实。在屏幕上显示每个人和他们感兴趣的事实。从那里,改变一个名单上的人的事实。另外,在列表中添加一个额外的人和相应的事实。显示新创建的人员和事实列表。尝试运行程序多次,并注意顺序是否改变。

样本输出:

代码清单 209

            Jeff: Was born in France.
            David: Was a mascot in college.
            Anna: Has arachnophobia.

            Dylan: Has a pet hedgehog.
            Jeff: Was born in France.
            David: Can juggle.
            Anna: Has arachnophobia.

解决办法

代码清单 210

            def display_facts(facts):
               """Displays facts"""
               for fact in facts:
                   print('{}: {}'.format(fact, facts[fact]))
               print()

            facts = {
               'David': 'Was a mascot in college.',
               'Jeff': 'Was born in France.',
               'Anna': 'Has arachnophobia.'
            }

            display_facts(facts)

            facts['David'] = 'Can juggle.'
            facts['Dylan'] = 'Has a pet hedgehog.'

            display_facts(facts)

资源

数据结构(字典):https://docs.python.org/3/tutorial/datastructures.html