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

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

汉文有道恩犹薄,湘水无情吊岂知?

大家好,我是皮皮。

一、前言

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

b5b45ba43948fda067c6e9c642d2d00c.png

二、实现过程

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

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

d=['熊', '1.3t', '海鸥', '88kg', '彭', '99kg', '凤', '0.88t']
rs={d[i]:d[i+1] for i in range(0,len(d),2)}
print(rs)

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

5f64c95aaaa319ebe3c2c886dd5010b7.png

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

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)

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

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

5ea4df6b6e3c345f556172c5620ece9c.png

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

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)
1807971cbeb3ef358bae12ab867a9355.png

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

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)
fe926593cc7f20c564d01f200954e22d.png

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

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)

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

dict1 = {'熊': '1.3t', '海鸥': '88kg', '彭': '99kg', '凤': '0.68t'}
list1 = []
for i, j in dict1.items():
    list1.append([i, j])
print(list1)

三、总结

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

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

大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting),应粉丝要求,我创建了一些高质量的Python付费学习交流群和付费接单群,欢迎大家加入我的Python学习交流群和接单群!

7e546195f9e88a89e4daa4c56e76f337.png

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

7b32dbaab707960a5687b81375f2e966.png

------------------- End -------------------

往期精彩文章推荐:

bfa31e66be64431abcf4d24b33befe73.png

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值