Python进阶技能(2)如何在列表,字典,集合中根据条件筛选数据

1.案例

过滤掉列表[3, 9, -1, 10, 20,-2…]中的负数
筛选出字典{“LiLei”:79, “Jim”:88,“Lucy”:92…}中值高于90的项
筛选出集合{77, 89, 32, 20…}中能被3整除的元素

2.解决方案

列表:
列表解析:[x for x in data if x>=0]
filter函数:filter(lambda x:x>=0,data)

字典
字典解析:{k:v for k,v in d.items() if v>=90}

集合:
集合解析:{x for x in s if x%3==0}

3.代码实现

In [15]: from random import randint

In [16]: l = [randint(-10, 10) for _ in range(10)]

In [17]: l
Out[17]: [-2, 3, -9, -1, -9, -2, -3, 3, -4, -4]

In [18]: [x for x in l if x>=0]
Out[18]: [3, 3]

In [19]: list(filter(lambda x:x>=0, l))
Out[19]: [3, 3]

In [20]: { "student%d" % i:randint(50, 100) for i in range(1, 21)}
Out[20]:
{'student1': 99,
 'student2': 60,
 'student3': 55,
 'student4': 51,
 'student5': 72,
 'student6': 73,
 'student7': 98,
 'student8': 86,
 'student9': 60,
 'student10': 55,
 'student11': 92,
 'student12': 78,
 'student13': 74,
 'student14': 59,
 'student15': 84,
 'student16': 66,
 'student17': 88,
 'student18': 57,
 'student19': 65,
 'student20': 56}

In [21]: d = { "student%d" % i:randint(50, 100) for i in range(1, 21)}

In [25]: {k:v for k, v in d.items() if v>=90}
Out[25]:
{'student3': 90,
 'student11': 93,
 'student12': 100,
 'student18': 99,
 'student19': 100}

In [27]: {filter(lambda item:item[1]>=90, d.items())}
Out[27]: {<filter at 0x7f97ed18fbe0>}

In [28]: g = filter(lambda x:x[1]>=90, d.items())

In [29]: list(g)
Out[29]:
[('student3', 90),
 ('student11', 93),
 ('student12', 100),
 ('student18', 99),
 ('student19', 100)]

In [30]: dict(g)
Out[30]: {}

In [31]: g = filter(lambda x:x[1]>=90, d.items())

In [32]: dict(g)
Out[32]:
{'student3': 90,
 'student11': 93,
 'student12': 100,
 'student18': 99,
 'student19': 100}

In [34]: {randint(0,20) for _ in range(20)}
Out[34]: {2, 3, 4, 5, 6, 7, 9, 11, 12, 14, 17, 18, 20}

In [35]: s = {randint(0,20) for _ in range(20)}

In [36]: {x for x in s if x%3==0}
Out[36]: {0, 3, 9, 15, 18}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值