python字典:如何使用它编写更好的代码

可以将Python字典视为无序的键值对集。在本文中,我们将介绍如何使用它们并使用它们改进Python代码。...

python字典是一种数据结构,类似于其他编程语言中的关联数组。数组或列表按位置索引元素。另一方面,字典通过可以是字符串的键来索引元素。可以将字典视为无序的键值对集。

python-dictionary

a python dictionary key-value pairs

在本文中,我们将向您介绍如何使用python字典。

创建词典

有几种方法可以创建python字典。最简单的方法是使用大括号初始化,语法类似于JSON。

users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}

你也可以用数字作为钥匙。但是,要小心使用浮点数作为键,因为计算机将它们存储为近似值。

rain_percent = { 1980: '17%', 1981: '15%', 1982: '10%'}print rain_percentprint rain_percent[1980]# prints{1980: '17%', 1981: '15%', 1982: '10%'}17%

指定键值对

还可以使用名称-值对作为dict()构造函数的关键字参数来创建和初始化字典。

population = dict(California=37253956, Colorado=5029196, Connecticut=3574097, Delaware=897934)print population# prints{'Connecticut': 3574097, 'Delaware': 897934, 'California': 37253956, 'Colorado': 5029196}

键值元组数组

创建字典的另一种方法是使用键值元组数组。这里是与上面相同的例子。

pairs = [('California', 37253956), ('Colorado', 5029196), ('Connecticut', 3574097), ('Delaware', 897934)]population = dict(pairs)print population# prints{'Connecticut': 3574097, 'Delaware': 897934, 'California': 37253956, 'Colorado': 5029196}

听写理解

Dict comprehension提供了一种很酷的语法来初始化Dict,如果您可以基于键计算值的话。下面初始化一系列数字的dict和平方值。

print {x: x**2 for x in xrange(10, 20)}# prints{10: 100, 11: 121, 12: 144, 13: 169, 14: 196, 15: 225, 16: 256, 17: 289, 18: 324, 19: 361}

它是如何工作的?后一部分(对于xrange(10,20)中的x)返回指定范围内的数字范围。dict理解部分({x:x**2..})在这个范围内循环并初始化字典。

使用python词典

一旦你创建了字典,你能用它做什么?你可以访问元素,更新值,删除元素等等。

访问python字典元素

使用括号中的键访问dict的元素,就像访问数组或列表一样。

print population['Delaware']# prints897934

如果键是数字,则不需要引号。然后,表达式看起来像一个列表或数组索引。

print rain_percent[1980]# prints17%

访问密钥时密钥的类型必须与Python字典中存储的内容匹配。由于存储的密钥是数字,而访问密钥是字符串,因此以下情况会导致错误。

x = '1980'print rain_percent[x]# results in 1 x = '1980'----> 2 print rain_percent[x]KeyError: '1980'

访问不存在的密钥是一个错误。

rain_percent = { 1980: '17%', 1981: '15%', 1982: '10%'}print rain_percent[1983]# prints 1 rain_percent = { 1980: '17%', 1981: '15%', 1982: '10%'}----> 2 print rain_percent[1983]KeyError: 1983

要访问键并在映射不存在时提供默认值,请使用get()方法,并将默认值用作第二个参数。

print rain_percent.get(1985, '0%')# prints0%

检查是否存在

如果您想检查一个密钥的存在而不实际尝试访问它(并且可能遇到如上所述的密钥错误),该怎么办?您可以在返回布尔值的dct格式key中使用in关键字。

print 1980 in rain_percentprint '1980' in rain_percent# printsTrueFalse

使用格式key not in dct反转条件(即确保该键不在Python字典中)。这相当于标准的python否定,而不是dct中的key。

print 1980 not in rain_percentprint 1985 not in rain_percent# printsFalseTrue

修改图元

通过指定给所需的键来更改值。

users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}users['age'] = 29print users# prints{'lastname': 'Smith', 'age': 29, 'firstname': 'John'}

使用相同的语法向Python字典添加新映射。

users['dob'] = '15-sep-1971'print users# prints{'dob': '15-sep-1971', 'lastname': 'Smith', 'age': 29, 'firstname': 'John'}

使用Update()方法一次性更新字典的多个元素。

users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}users.update({'age': 29, 'dob': '15-sep-1971'})print users# prints{'dob': '15-sep-1971', 'lastname': 'Smith', 'age': 29, 'firstname': 'John'}

使用setdefault()为键设置默认值。如果映射不存在,则此方法设置键的值。它返回当前值。

# does not change current valueprint users.setdefault('firstname', 'Jane')# printsJohn# sets valueprint users.setdefault('city', 'NY')# printsNY# Final valueprint users# prints{'lastname': 'Smith', 'age': 27, 'firstname': 'John', 'city': 'NY'}

删除元素

使用del运算符删除字典中的映射。此运算符不返回任何内容。

如果字典中不存在密钥,则会遇到密钥错误。

users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}del users['age']print users# prints{'lastname': 'Smith', 'firstname': 'John'}

当您希望返回已删除的值时,请改用pop()方法。

users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}print users.pop('age')print users# prints27{'lastname': 'Smith', 'firstname': 'John'}

如果你想删除一个键,如果它存在,而不造成错误,如果它没有呢?可以使用pop()并为第二个参数指定None,如下所示:

users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}users.pop('foo', None)print users# prints{'lastname': 'Smith', 'age': 27, 'firstname': 'John'}

这里有一个从字典中删除一串键的单行程序,不会对不存在的键造成错误。

users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27, 'dob': '15-sep-1971'}map(lambda x : users.pop(x, None),['age', 'foo', 'dob'])print users

要从字典中删除所有键吗?使用clear()方法。

users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}users.clear()print users# prints{}

使用python字典循环

Python提供了许多方法来循环字典的条目。挑一个适合你的需要。

循环键

  • The simplest method for processing keys (and possibly values) in sequence uses a loop of the form: users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for k in users: print k, '=>', users[k]# printslastname => Smithage => 27firstname => John
  • Using the method iterkeys() works exactly the same as above. Take your pick as to which form you want to use. users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for k in users.iterkeys(): print k, '=>', users[k]# printslastname => Smithage => 27firstname => John
  • A third method to retrieve and process keys in a loop involves using the built-in function iter(). users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for k in iter(users): print k, '=>', users[k]# printslastname => Smithage => 27firstname => John
  • When you need the index of the key being processed, use the enumerate() built-in function as shown. users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for index, key in enumerate(users): print index, key, '=>', users[k]# prints0 lastname => John1 age => John2 firstname => John

在键值对上循环

  • When you want to retrieve each key-value pair with a single call, use iteritems(). users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for k, v in users.iteritems(): print k, '=>', v# printslastname => Smithage => 27firstname => John

迭代值

  • The method itervalues() can be used to iterate over all the values in the dictionary. Though this method looks similar to a loop using values(), it is more efficient since it does not extract all the values at once. users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for value in users.itervalues(): print value# printsSmith27John

提取数组

以下方法描述以数组形式提取各种Python字典信息。生成的数组可以使用普通的python构造进行循环。但是,请记住,根据字典的大小,返回的数组可能很大。因此,处理这些数组可能比使用上面的迭代器方法更昂贵(内存方面)。

使用这些数组是可以接受的一种情况是,当遇到不需要的元素时,需要从字典中删除项。修改字典时使用迭代器可能会导致运行时错误。

  • The method items() returns an array of key-value tuples. You can iterate over these key-value pairs as shown: users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for k, v in users.items(): print k, '=>', v# printslastname => Smithage => 27firstname => John
  • Retrieve all the keys in the dictionary using the method keys(). users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}print users.keys()# prints['lastname', 'age', 'firstname']Use the returned array to loop over the keys. for k in users.keys(): print k, '=>', users[k]# printslastname => Smithage => 27firstname => John
  • In a similar way, use the method values() to retrieve all the values in the dictionary. for value in users.values(): print value# printsSmith27John

如何使用python词典?

在本文中,我们尝试介绍python字典最常见的用例。请务必查看我们的所有其他Python文章,以获得更多Python技巧。如果您有其他用例,您觉得应该包括在内,请在下面的评论中告诉我们!

图片来源:viper345/Shutterstock

  • 发表于 2021-03-14 05:15
  • 阅读 ( 262 )
  • 分类:编程

你可能感兴趣的文章

菲律宾比索(php)和python(python)的区别

关键区别——php与python PHP和Python是两种流行的编程语言。PHP和Python的关键区别在于PHP专门用于web开发,而Python则用于web开发并作为一种通用编程语言。 PHP是一种为web开发而设计的服务器端脚本语言。Python是一种用于通用编程...

  • 发布于 2020-10-18 23:19
  • 阅读 ( 265 )

学习python?下面是如何复制文件

您想提高Python技能吗?然后,您可以尝试使用Python在计算机上执行一些任务。使用Python将文件从一个目录复制和粘贴到另一个目录是一种有趣的方法。 ...

  • 发布于 2021-03-11 10:45
  • 阅读 ( 337 )

如何在python中使用列表理解

在Python中及时使用列表理解可以使迭代列表操作变得容易。除了一行之外,它的可读性更高,执行效率也更高。 ...

  • 发布于 2021-03-11 10:55
  • 阅读 ( 576 )

为什么c编程仍然值得学习

...言相比:JavaScript有1604k的pull请求,Java有763k的pull请求,Python有744个pull请求。Ruby、PHP、C++和CSS也击败了C. ...

  • 发布于 2021-03-13 03:02
  • 阅读 ( 309 )

用这些免费的在线交互式shell在浏览器中试用python

如果您正在考虑学习Python,那么您可能会被初始设置过程弄得不知所措。您需要在系统上安装Python,然后学习如何使用命令行处理代码,或者学习如何使用交互式shell,或者学习如何设置pythonide。 ...

  • 发布于 2021-03-15 00:25
  • 阅读 ( 369 )

什么是编码?它是如何工作的?

...机说你好,世界。它不使用机器代码,而是使用一种称为Python的编程语言。 ...

  • 发布于 2021-03-18 05:18
  • 阅读 ( 347 )

7统一游戏开发语言学习:哪种最好?

... 在统一的早期,可以选择使用Boo——一种类似Python的语言。这也许并不奇怪,因为布的设计师罗德里戈德奥利维拉(rodrigob.deoliveira)为Unity工作。该语言与.NET和Mono兼容,完全可以通过游戏引擎实现。出什么事了? ...

  • 发布于 2021-03-21 18:18
  • 阅读 ( 253 )

如何使用click在python中创建自己的命令行程序

Click是一个用于编写命令行接口的Python包。它为您生成了漂亮的文档,并允许您用一行代码构建命令行界面。简而言之:它非常棒,可以帮助你的程序更上一层楼。 ...

  • 发布于 2021-03-23 13:56
  • 阅读 ( 267 )

如何使用python列表理解(以及何时不使用它们)

您可能听说过Python的列表理解。也许这甚至是你在没有真正理解的情况下使用的东西。现在是学习的时候了,因为我们将介绍有关Python中列表理解的所有知识。 ...

  • 发布于 2021-03-24 12:24
  • 阅读 ( 229 )

关于python编程最常见的问题

...决定学习一种新的编程语言,你做了一些研究,你想知道Python是否适合你?或者您已经决定学习Python,但不确定如何开始? ...

  • 发布于 2021-03-25 18:32
  • 阅读 ( 434 )