鱼C论坛

 找回密码
 立即注册
查看: 368|回复: 12

列表推导式的问题 谢谢

[复制链接]
发表于 2020-2-20 21:18:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. dict1 = {'name': 'tom', 'salary': 5000}
  2. dict2 = {'name': 'lucy', 'salary': 8000}
  3. dict3 = {'name': 'jack', 'salary': 4500}
  4. dict4 = {'name': 'lily', 'salary': 3000}

  5. list1 = [dict1, dict2, dict3, dict4]
  6. newlist = []
  7. for each in list1:
  8.     if each['salary'] > 5000:
  9.         each['salary'] = each['salary'] + 200
  10.     else:
  11.         each['salary'] = each['salary'] + 500
  12.     newlist.append(each)

  13. print(newlist)

  14. newlist2 = [{each['name]  each['salary'] + 200 if each['salary'] > 5000 else each['salary'] + 500} for each in list1]

  15. print(newlist2)
复制代码


怎么用推导式使得  newlist2  得到和newlist 一样的结果呢?

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

使用道具 举报

发表于 2020-2-20 21:24:49 | 显示全部楼层
  1. dict1 = {'name': 'tom', 'salary': 5000}
  2. dict2 = {'name': 'lucy', 'salary': 8000}
  3. dict3 = {'name': 'jack', 'salary': 4500}
  4. dict4 = {'name': 'lily', 'salary': 3000}

  5. list1 = [dict1, dict2, dict3, dict4]
  6. newlist = []
  7. for each in list1:
  8.     if each['salary'] > 5000:
  9.         each['salary'] = each['salary'] + 200
  10.     else:
  11.         each['salary'] = each['salary'] + 500
  12.     newlist.append(each)

  13. print(newlist)

  14. newlist2 = [dict([(i, j) if i != "salary" else (i, j + 200) if j > 5000 else (i, j + 500) for i, j in each.items()]) for each in list1]

  15. print(newlist2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 21:33:22 | 显示全部楼层

大哥   真心看不懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 21:43:31 | 显示全部楼层
mcdmcd 发表于 2020-2-20 21:33
大哥   真心看不懂啊

楼上所写的
  1. newlist2 = [dict([(i, j) if i != "salary" else (i, j + 200) if j > 5000 else (i, j + 500) for i, j in each.items()]) for each in list1]
复制代码

按逻辑缩进就好理解了
  1. [dict
  2.       ([
  3.         (i, j) if i != "salary"
  4.         else (i, j + 200) if j > 5000
  5.         else (i, j + 500)
  6.         for i, j in each.items()
  7.     ])
  8.      for each in list1]
复制代码


希望能帮到你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 21:47:09 | 显示全部楼层
dlnb526 发表于 2020-2-20 21:43
楼上所写的
按逻辑缩进就好理解了

if i != "salary"

这是个什么意思呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 21:51:04 | 显示全部楼层
mcdmcd 发表于 2020-2-20 21:47
if i != "salary"

这是个什么意思呢?
  1. [dict
  2.       ([
  3.         (i, j) if i != "salary"     如果字典中的key 不是salary,那么就不做改动。
  4.         else (i, j + 200) if j > 5000   
  5.         else (i, j + 500)
  6.         for i, j in each.items()
  7.     ])
  8.      for each in list1]
复制代码


i j 分别对应字典的key,value

后面几行就是当key 是salary时,value的值怎么变动。

希望可以帮到你并采纳哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 22:05:41 | 显示全部楼层
dlnb526 发表于 2020-2-20 21:51
i j 分别对应字典的key,value

后面几行就是当key 是salary时,value的值怎么变动。

这么看看通透多了     估计现阶段让我写我 肯定想不起来这么用

谢谢啊

还有没有其他办法写法    容易例假一点的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 22:22:28 | 显示全部楼层
  1. newlist2 = [{**each, **{"salary": each['salary'] + 200 if each['salary'] > 5000 else each['salary'] + 500 }} for each in list1]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-21 07:42:58 | 显示全部楼层

为啥用了两层{}呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-21 09:46:55 | 显示全部楼层
从运行结果看,list1和Newlist是一样的,但list1应该不变啊?求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-21 09:55:29 | 显示全部楼层
mcdmcd 发表于 2020-2-21 07:42
为啥用了两层{}呢?

python3.6 之后的新特性,合并字典,你可以去查一下怎么使用的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-21 09:59:54 | 显示全部楼层
scwcha 发表于 2020-2-21 09:46
从运行结果看,list1和Newlist是一样的,但list1应该不变啊?求解

因为 for 循环引用了 list1,list 和 map 都是可变类型,所以会改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-21 10:07:50 | 显示全部楼层
°蓝鲤歌蓝 发表于 2020-2-21 09:59
因为 for 循环引用了 list1,list 和 map 都是可变类型,所以会改变。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 23:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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