鱼C论坛

 找回密码
 立即注册
查看: 2624|回复: 1

[已解决]字符串转字典 有点不理解,求大神指教

[复制链接]
发表于 2023-1-4 11:26:36 | 显示全部楼层 |阅读模式
5鱼币
  1. >>> s = 'a=1,b=2,c = 3'
  2. >>> dic = dict((l.split('=') for l in s.split(',')))
  3. >>> dic
  4. {'a': '1', 'b': '2', 'c ': ' 3'}
复制代码



dic = dict((l.split('=') for l in s.split(',')))
这行代码不理解,帮忙解释一下 谢谢
最佳答案
2023-1-4 11:26:37
(l.split('=') for l in s.split(',')) 是一个生成器表达式,生成器是一个特殊的迭代器

dict 可以接收一个返回包含两个元素(作为键值对)的序列的迭代器生成一个字典

s.split(',') 将字符串 'a=1,b=2,c = 3' 切割为 ('a=1', 'b=2', 'c = 3')

然后 for l in s.split(',')) 相当于 for l in ('a=1', 'b=2', 'c = 3'),每个元素再用 '=' 切割 l.split('=')

最后对 ('a=1', 'b=2', 'c = 3') 中的每个元素分别切割成 ('a', '1')   ('b', '2')   ('c ', ' 3')

然后 dict 用 ('a', '1')   ('b', '2')   ('c ', ' 3') 作为键值对生成了一个字典。

还有就是当函数调用的参数只有生成器表达式的时候,函数调用的括号可以跟生成器表达式的括号共用,

这样美观一点




  1. dic = dict((l.split('=') for l in s.split(',')))
复制代码


可以改成

  1. dic = dict(l.split('=') for l in s.split(','))
复制代码

最佳答案

查看完整内容

(l.split('=') for l in s.split(',')) 是一个生成器表达式,生成器是一个特殊的迭代器 dict 可以接收一个返回包含两个元素(作为键值对)的序列的迭代器生成一个字典 s.split(',') 将字符串 'a=1,b=2,c = 3' 切割为 ('a=1', 'b=2', 'c = 3') 然后 for l in s.split(',')) 相当于 for l in ('a=1', 'b=2', 'c = 3'),每个元素再用 '=' 切割 l.split('=') 最后对 ('a=1', 'b=2', 'c = 3') 中的每个元素分别切割成 ('a', ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-4 11:26:37 | 显示全部楼层    本楼为最佳答案   
(l.split('=') for l in s.split(',')) 是一个生成器表达式,生成器是一个特殊的迭代器

dict 可以接收一个返回包含两个元素(作为键值对)的序列的迭代器生成一个字典

s.split(',') 将字符串 'a=1,b=2,c = 3' 切割为 ('a=1', 'b=2', 'c = 3')

然后 for l in s.split(',')) 相当于 for l in ('a=1', 'b=2', 'c = 3'),每个元素再用 '=' 切割 l.split('=')

最后对 ('a=1', 'b=2', 'c = 3') 中的每个元素分别切割成 ('a', '1')   ('b', '2')   ('c ', ' 3')

然后 dict 用 ('a', '1')   ('b', '2')   ('c ', ' 3') 作为键值对生成了一个字典。

还有就是当函数调用的参数只有生成器表达式的时候,函数调用的括号可以跟生成器表达式的括号共用,

这样美观一点




  1. dic = dict((l.split('=') for l in s.split(',')))
复制代码


可以改成

  1. dic = dict(l.split('=') for l in s.split(','))
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 01:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表