Python_字典

一个简单的字典

  来看一个游戏,这些外星人的颜色和点数各不相同。下面是一个简单的字典,存储了有关特定外星人的信息:
alien.py

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

green
5

使用字典

  在python中,字典是一系列键-值对。每个键值都与一个值相关联,你可以使用键来访问与之相关联的值。
  在python中,字典放在花括号{}中的一系列键-值对表示。如:

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

  键-值对是两个相关联的值。指定键时,Python将返回与之相关联的值。键和值之间用冒号分隔,而键-值对之间用逗号分隔。

添加键-值对

  字典是一种动态结构,可随时在其中添加一个键-值对。要添加键-值对,可依次指定字典名、用方括号括起来的键和相关联的值。

alien_0={'color':'green','points':5}
alien_0['x_position']=0
alien_0['y_position']=25
print(alien_0)

{'color': 'green', 'x_position': 0, 'y_position': 25, 'points': 5}

修改字典中的值

alien_0={'x_position':0,'y_position':25,'speed':'medium'}
print("Original x-positon: "+str(alien_0['x_position']))

#向右移动外星人
#据外星人当前速度决定将其移动多远
if alien_0['speed']=='slow':
    x_increment=1
elif alien_0['speed']=='medium':
    x_increment=2
else:
    #这个外星人的速度一定很快
    x_increment=3
#新位置等于老位置加上增量
alien_0['x_position']=alien_0['x_position']+x_increment
print("New x-position: "+str(alien_0['x_position']))

Original x-positon: 0
New x-position: 2

删除键-值对

  对于字典中不再需要的信息,可使用del语句将相应的键-值对删除。使用del语句时,必须指定字典名和要删除的键。

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

del alien_0['points']
print(alien_0)

{'points': 5, 'color': 'green'}
{'color': 'green'}

遍历字典

  一个python字典可能只包含几个键-值对,也可能包含数百万个键-值对。鉴于字典可能包含大量的数据,Python支持对字典遍历。字典可以用各种方式存储信息,因此多种遍历字典的方式:可遍历字典的所有键-值对,键或值。

遍历所有的键-值对

  探索各种遍历方法前,先来看一个新字典,它用于有关网站用户的存储信息。下面的字典存在一名用户的用户名、名和姓:

user_0={
        'username':'efermi',
        'first':enrico
        'last':'fermi',
        }
for key,value in user_0.items():
    print("\nKey: "+key)
    print("Value: "+value)

  要编写用于遍历字典的for循环,可声明两个变量,用于存储键-值对中的键和值。对于这两个变量,可使用任何名称。

for k,v in user_0.items()

  for语句的第二个部分包含字典名和方法items( ),它返回一个键-值对列表。接下来,for循环依次将每个键-值对存储到指定的两个变量中。在前面的示例中,我们使用这两个变量来打印每个键及其关联的值。第一条print语句中的“\n”确保输出每个键-值对前插入一个空行。
  注意,即便遍历字典时,键-值的返回顺序也与存储顺序不同。Python不关心键-值的存储顺序,而只跟踪键和值之间的关联关系。

遍历字典中所有的键

  在不需要使用字典中的值时,方法keys( )很有用。下面来遍历字典favorite_languages,并将每个被调查者的名字都打印出来:

favorite_languages={
        'jen':'python',
        'sarah':'c',
        'edward':'ruby',
                'phil':'python',
        }
for name in favorite_languages.keys():
    print(name.title())

Edward
Jen
Sarah
Phil

  遍历字典时,会默认遍历所有的键,因此,如果将上述代码中的for name in favorite_languages.keys( )替换为for name in favorite_languages:,输出将不变。

按顺序遍历字典中的所有键

  字典总是明确地记录键和值之间的关系,但获取字典的元素时,获取的顺序是不可预测的。这不是问题,因为通常你想要的只是获取与键相关联的正确值。
  要特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用sorted( )来获得按特定顺序排列的键列表的副本:

favorite_languages={
        'jen':'python',
        'sarah':'c',
        'edward':'ruby',
                'phil':'python',
        }
for name in sorted(favorite_languages.keys()):
    print(name.title() + ",thank you for taking the poll")

Edward,thank you for taking the poll
Jen,thank you for taking the poll
Phil,thank you for taking the poll
Sarah,thank you for taking the poll

遍历字典中的所有值

  如果你感兴趣的只要是字典中包含的值,可使用方法values( ),它返回一个值列表,而不包含任何键。

favorite_languages={
        'jen':'python',
        'sarah':'c',
        'edward':'ruby',
                'phil':'python',
        }
print("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
    print(language.title())

Python
Ruby
C

  为剔除重复选项,可使用集合(set).集合类似于列表,但每个元素都必须是独一无二的。通过对包含重复元素的列表调用set( ),可让Python找出列表中独一无二的元素,并使用这些元素来创建一个集合。

嵌套

  有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这成为嵌套。你可以在列表中嵌套字典,在字典中嵌套列表甚至在字典中嵌套字典。

字典列表

  字典alien_0包含一个外星人的信息,但无法存储第二个人外星人的信息,更别说屏幕上全部外星人的信息了。

alien.py

alien_0={'color':'green','points':5}
alien_1={'color':'yellow','points':10}
alien_2={'color':'red','points':15}
aliens=[alien_0,alien_1,alien_2]
for alien in aliens:
    print(alien)

{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}

  我们首先创建了一个字典,其中每个字典都表示一个外星人。最后,我们遍历这个列表,将每个外星人打印出来。
  更符合现实的情形是,外星人不止三个,且每个外星人都是代码自动生成的。在下面的示例中,我们使用range( )生成了30个外星人:

#创建一个用于存储外星人的空列表
aliens=[]

#创建30个绿色外星人
for alien_number in range(30):
    new_alien={'color':'green','points':5,'speed':'slow'}
    aliens.append(new_alien)

#显示前五个外星人
for alien in aliens[:5]:
    print(alien)
print("...")

#显示创建了多少外星人
print("Total number of aliens:" + str(len(aliens)))

{'speed': 'slow', 'points': 5, 'color': 'green'}
{'speed': 'slow', 'points': 5, 'color': 'green'}
{'speed': 'slow', 'points': 5, 'color': 'green'}
{'speed': 'slow', 'points': 5, 'color': 'green'}
{'speed': 'slow', 'points': 5, 'color': 'green'}
...
Total number of aliens:30

  在这个示例中首先创建了一个空列表,用于接下来将创建的所有外星人。range( )返回一系列数字,其唯一的用途就是告诉python我们要重复这个循环多少次。每次执行这个循环时,都创建一个外星人,然后将其附加到aliens的末尾。使用一个切片来打印前5个外星人;最后打印列表的长度,以证明确实创建了30个外星人。

在字典中存储列表

  有时候,需要将列表存储在字典中,而不是将字典存储在列表中。在前面有喜欢的编程语言示例中,如果将每个人的回答都存储在一个列表中,被调查者就可选择多种喜欢的语言。

favorite_languages={
    'jen':['python','ruby'],
    'sarah':['c'],
    'edward':['ruby','go'],
    'phil':['python','haskell'],
    }

for name,languages in favorite_languages.items():
    print("\n"+name.title()+"'s favorite languages are:")
    for language in languages:
        print(language.title())

Sarah's favorite languages are:
C

Edward's favorite languages are:
Ruby
Go

Jen's favorite languages are:
Python
Ruby

Phil's favorite languages are:
Python
Haskell

在字典中存储字典

  如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户相关联的值。在下面的程序中,对于每位用户,我们都存储了其三项信息:名、姓和居住地;为访问这些信息,我们遍历所有的用户名,并访问与每个用户名相关联的信息字典:

many_users.py

users={
    'aeinstein':{
        'first':'albert',
        'last':'einstein',
        'location':'princeton'},

    'mcurie':{
        'first':'marie',
        'last':'curie',
        'location':'paris',
        },
    }

for username,user_info in users.items():
    print("\nUsername:"+ username)
    full_name=user_info['first']+" "+user_info['last']
    location=user_info['location']

    print("\tFull name: "+full_name.title())
    print("\tLocation: "+location.title())

Userbane:aeinstein
    Full name: Albert Einstein
    Location: Princeton

Username:mcurie
    Full name: Marie Curie
    Location: Paris

  我们首先定义了一个名为users的字典,其中包含两个键:用户名‘aeinstein’和‘mcurie’;与每个键相关联的值都是一个字典,其中包含用户的名、姓和居住地。我们遍历字典users,让Python依次将每个键存储在变量username中,并依次将与当前相关联的字典存储在变量user_info中。
  变量user_info包含用户信息字典,而该字典包含三个键:‘first’,’last’,’location’;对于每个用户,我们都使用这些键来生成整洁的姓名和居住地,然后打印有关用户的简要信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值