gpt4 book ai didi

python:遍历具有列表值的字典

转载 作者:IT老高 更新时间:2023-10-28 22:15:50 26 4
gpt4 key购买 nike

给定一个列表字典,例如

d = {'1':[11,12], '2':[21,21]}

哪个更pythonic或更可取:

for k in d:
for x in d[k]:
# whatever with k, x

for k, dk in d.iteritems():
for x in dk:
# whatever with k, x

或者还有什么需要考虑的?

编辑,如果列表可能有用(例如,标准字典不保留顺序),这可能是合适的,尽管它要慢得多。

d2 = d.items()
for k in d2:
for x in d2[1]:
# whatever with k, x

最佳答案

这是一个速度测试,为什么不呢:

import random
numEntries = 1000000
d = dict(zip(range(numEntries), [random.sample(range(0, 100), 2) for x in range(numEntries)]))

def m1(d):
for k in d:
for x in d[k]:
pass

def m2(d):
for k, dk in d.iteritems():
for x in dk:
pass

import cProfile

cProfile.run('m1(d)')

print

cProfile.run('m2(d)')

# Ran 3 trials:
# m1: 0.205, 0.194, 0.193: average 0.197 s
# m2: 0.176, 0.166, 0.173: average 0.172 s

# Method 1 takes 15% more time than method 2

cProfile 示例输出:

         3 function calls in 0.194 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.194 0.194 <string>:1(<module>)
1 0.194 0.194 0.194 0.194 stackoverflow.py:7(m1)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}



4 function calls in 0.179 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.179 0.179 <string>:1(<module>)
1 0.179 0.179 0.179 0.179 stackoverflow.py:12(m2)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 {method 'iteritems' of 'dict' objects}

关于python:遍历具有列表值的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18289678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com