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
字典的键,而phone
和email
是嵌套字典中使用的键。此联系人列表中的每个人都有电话号码和电子邮件地址。如果你想知道大卫的电子邮件地址,你可以使用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