python列表转化字典_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'}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值