首先创建一个字典
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
总结:
在字典数据量较小时, 依然推荐使用字典解析式
去筛选数据, 在数据量较大且数据需要一条一条处理时, 生成器依然是最佳的选择