首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >盘点一个Python列表转换为字典并排序的问题

盘点一个Python列表转换为字典并排序的问题

作者头像
Python进阶者
发布2023-03-02 18:14:57
发布2023-03-02 18:14:57
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

一、前言

前几天在逛知乎的时候,看到了一个题目,还挺有意思的,这里拿出来跟大家一起分享下。

二、实现过程

这里涉及到列表和字典的相互转换,其实不用刻意去记住,能记住当然最好,记不住也没关系,某度上关于这个问题代码也有很多,用的时候去查即可。

这里【瑜亮老师】给了一个代码,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
d=['熊', '1.3t', '海鸥', '88kg', '彭', '99kg', '凤', '0.88t']
rs={d[i]:d[i+1] for i in range(0,len(d),2)}
print(rs)

这里继续拓展下,现在得到了列表转字典了,现在需要针对这个字段的值进行升序排序处理,该怎么破?

这个问题稍微难一些了,我在某乎上看到一个解答,稍微修改了下,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
dict1 = {'熊': '1.3t', '海鸥': '88kg', '彭': '99kg', '凤': '0.68t'}
list1 = []
for i, j in dict1.items():
    list1.append([i, j])
print(list1)

def getWeight(weight):
    if weight[-1] == 't':
        return float(weight[:-1]) * 1000
    elif weight[-2:] == 'kg':
        return float(weight[:-2])
    return 0

animals = sorted(list1, key=lambda animal: getWeight(animal[1]))
print(animals)

看上去还是有些冗余,应该是可以再优化下的。后来群里的高手们,纷纷出手了,这里记录下。

这里【甯同学】给出了下列代码:

思路很细节,后来针对这个字典处理,结合【瑜亮老师】的思路,我给出了如下代码:

代码语言:javascript
代码运行次数:0
运行
复制
animals = ['熊', '1.3t', '海鸥', '88kg', '彭', '99kg', '凤', '0.68t']
result = {animals[i]: animals[i+1] for i in range(0, len(animals), 2)}
print(result)
d1 = list(result.items())
d1.sort(key=lambda x: float(x[1][:-1])*1000 if '.' in x[1] else int(x[1][:-2]))
d1 = dict(d1)
print(d1)

后来【论草莓如何成为冻干莓】直接使用一行代码搞定,真是太强了!

代码语言:javascript
代码运行次数:0
运行
复制
d = ['熊', '1.3t', '海鸥', '88kg', '彭', '99kg', '凤', '0.88t']
d1 = dict(sorted(zip(d[::2], d[1::2]), key=lambda x: float(x[1].replace('t', '')) * 1000 if 't' in x[1] else float(x[1].replace('kg', ''))))
print(d1)

上面是单列表,如果针对嵌套列表的情况,可以使用如下的代码进行转换和排序,如下:

代码语言:javascript
代码运行次数:0
运行
复制
animals = [['熊', '1.3t'], ['海鸥', '88kg'], ['彭', '99kg'], ['凤', '0.68t']]
animals_dict = dict(animals)
print(animals_dict)
d1 = list(animals_dict.items())
d1.sort(key=lambda x: float(x[1][:-1])*1000 if '.' in x[1] else int(x[1][:-2]))
d1 = dict(d1)
print(d1)

最后再拓展下,将字典转为列表的话,该怎么破?代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
dict1 = {'熊': '1.3t', '海鸥': '88kg', '彭': '99kg', '凤': '0.68t'}
list1 = []
for i, j in dict1.items():
    list1.append([i, j])
print(list1)

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python列表转换为字典处理的问题,转换后还针对字典进行了排序处理,并且多次给出了拓展,内容丰富,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【皮皮】提问,感谢【瑜亮老师】、【甯同学】、【论草莓如何成为冻干莓】给出的思路和代码解析,感谢【此类生物】、【凡人不烦人】、【小贾】、【Python狗】等人参与学习交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与数据挖掘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、实现过程
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档