首先创建一个字典
1 2 3 4 5 |
import random
import time
d = {str(x): random.randint(60, 100) for x in range(1, 21)}
print(d)
|
执行结果为:
1 |
{'16': 61, '3': 66, '17': 70, '10': 82, '1': 71, '18': 89, '5': 83, '4': 97, '19': 77, '12': 92, '8': 73, '11': 74, '15': 60, '13': 68, '20': 80, '7': 62, '2': 99, '6': 85, '14': 83, '9': 87}
|
现有一个需求, 需要此列表中筛选出值大于90的 id(key) 都有哪些, 以下给出四种实现方式
第一种方法: 循环迭代
1 2 3 4 5 6 7 |
print(time.time())
d2 = {}
for k in d:
if d[k] > 90:
d2[k] = d[k]
print(time.time())
print(d2)
|
执行结果为:
1 2 3 |
1500951937.126503
1500951937.126532
{'12': 92, '2': 99, '4': 97}
|
得到结果需要的时间为: 0.000029
第二种方法: filter 函数
1 2 3 4 |
print(time.time()) d5 = list(filter(lambda x: d[x] > 90, d)) print(time.time()) print(d5) |
执行结果为:
1 2 3 |
1500951937.126604 1500951937.126618 ['4', '12', '2'] |
得到结果需要的时间为: 0.000014
第三种方法: 字典解析式
1 2 3 4 |
print(time.time())
d3 = {k:v for k,v in d.items() if v > 90}
print(time.time())
print(d3)
|
执行结果为:
1 2 3 |
1500951937.126555
1500951937.126564
{'12': 92, '2': 99, '4': 97}
|
得到结果需要的时间为: 0.000009
第四种方法: 生成器表达式
1 2 3 4 5 |
print(time.time())
d4 = ({k: v} for k, v in d.items() if v > 90)
print(time.time())
for i in d4:
print(i)
|
执行结果为:
1 2 3 4 5 |
1500951937.126576
1500951937.126581
{'4': 97}
{'12': 92}
{'2': 99}
|
得到结果需要的时间为: 0.000005
总结:
在字典数据量较小时, 依然推荐使用字典解析式去筛选数据, 在数据量较大且数据需要一条一条处理时, 生成器依然是最佳的选择
博客围绕从字典中筛选出值大于90的id这一需求,介绍了四种实现方式,分别是循环迭代、filter函数、字典解析式和生成器表达式,并给出各方法执行结果及所需时间。总结指出,数据量小时推荐某方法,数据量大且需逐条处理时,生成器是最佳选择。
2108

被折叠的 条评论
为什么被折叠?



