现在我需要将其中h_bzmc开头的所有信息提取出来,我用的是这个办法:
ip_info=json.loads(r.text)
l = []
for k, v in ip_info['data'].items():
if k.startswith('h_bzmc'):
l.append(ip_info['data'][k])
这样在key很多的情况下速度是否会受到较大影响?是否有效率更高的方法呢?
现在我需要将其中h_bzmc开头的所有信息提取出来,我用的是这个办法:
ip_info=json.loads(r.text)
l = []
for k, v in ip_info['data'].items():
if k.startswith('h_bzmc'):
l.append(ip_info['data'][k])
这样在key很多的情况下速度是否会受到较大影响?是否有效率更高的方法呢?
本身查找和遍历(无序)的复杂度就是O(1)*O(N)了,所以如果你的key特别多
或者处理key的逻辑比较复杂
,可以考虑:
import multiprocessing
import time
some_data = {'h_bzmc1' :1,
'h_bzmc2': 2,
'h_bzmc3': 3,
'h_bzmc4': 4,
'h_bzmc5': 5,
'b_bzmc1': 1,
'b_bzmc2': 2,
'b_bzmc3': 3,
'b_bzmc4': 4,
'b_bzmc5': 5,
}
results=[]
def func(key):
if key.startswith('h_bzmc'):
time.sleep(1)
return some_data[key]
else:
return -1
if __name__ == "__main__":
t0 = time.time()
pool = multiprocessing.Pool(processes = 10)
for key in some_data:
results.append(pool.apply_async(func, (key, )))
pool.close()
pool.join()
print([_.get() for _ in results])
print(time.time() - t0)
t1 = time.time()
print([func(key) for key in some_data if key.startswith('h_bzmc')] )
print(time.time() - t1)
iter方法返回的是一个迭代器,所以应该很快且占用内存很小,这个方法应该能满足需求,如果只要判断key的话完全可以如下这样:l = [key for key in iter(dict) if key.startswith('h_bzmc')]
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
按照python官方的说法是直接
for key in dict
这种方式查找key
是最快的。你想要提取目的
key
可以直接这样: