Python字典和列表的互相转换

通过一些方法,我们可以实现字典和列表的相互转换。

Python 将字典转换为列表

有 3 个字典方法:keys()、values() 和  items()。它们可以返回类似列表的值,分别对应于字典的键、值和键—值对。但是这些方法返回的值并不是真正的列表,因为它们不能被修改,也没有 append() 方法。

但是,我们可以使用转换函数 list() 很方便地将它们的返回值转换成真正的列表。还是以字典 person 为例来说明。

>>> person={"name":"Johnson","age":9,"gender":"male","height":"140cm"}
>>> person.keys()
dict_keys(['name', 'age', 'gender', 'height'])
>>>list1=list(person.keys())
>>>list1
['name', 'age', 'gender', 'height']
>>>list2=list(person.values())
>>>list2
['Johnson', 9, 'male', '140cm']
>>>list3=list(person.items())
>>>list3
[('name', 'Johnson'), ('age', 9), ('gender', 'male'), ('height', '140cm')]

可以看到,list1 中的元素就是字典 person 中的键;list2 中的元素就是字典 person 中的值;而 list3 是一个嵌套了元组的列表,列表中的元素就是字典 person 中的键—值对。

字典是无法排序的,但是当有排序需求时,我们就可以把字典转化成列表,把字典中的每一个键—值对转化为嵌入到列表中的两位元组,然后再进行排序等操作。

现在,假设我们有一个记录得分的字典 scoreDict,键是名字,值是得分,现在要使用sort()方法对它进行排序。

>>> scoreDict={"John":82,"Christina":96,"Johnson":100,"Marry":73,"Emily":88,"Justin":92}
>>> scoreList=list(scoreDict.items())
>>> scoreList.sort()
>>> print (scoreList)
[('Christina', 96), ('Emily', 88), ('John', 82), ('Johnson', 100), ('Justin', 92), ('Marry', 73)]

我们可以看到,现在 scoreList 的顺序已经发生了变化,它是按照键的升序排列的,也就是按照姓名的字母顺序排列的,分别是“Christina”“Emily”“John”“Johnson”“Justin”和“Marry”。

但是,有的时候,我们不仅仅需要按照键来排序,还需要按照值来进行排序。例如,可能需要将得分从低到高进行排列。在介绍 sort() 方法时,我们曾提到,sort()方法可以接受关键字为 key 的参数,我们可以通过将 key 指定为一个特殊的 lambda 表达式,从而指定用于排序的元素。

在这个例子中,我们指定用 items 中的第 2 个元素,也就是说,按照得分来排序,代码如下所示。

>>> scoreList.sort(key=lambda items: items[1])
>>> print(scoreList)
[('Marry', 73), ('John', 82), ('Emily', 88), ('Justin', 92), ('Christina', 96), ('Johnson', 100)]

提示:lambda 表达式用来创建匿名函数,它可以接收任意多个参数并且返回单个表达式的值。这个概念稍微有点复杂,我们只需要简单了解即可。

Python 将列表转换为字典

我们还可以使用函数 dict() 将嵌套列表转换为字典。

>>>list4= [["key1","value1"],["key2","value2"],["key3","value3"]]
>>> dict1=dict(list4)
>>> dict1
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}