Python——通过过滤字典枚举的非笨拙方式



我有一个这样的代码(d是一些字典,s是一些集合(:

for i, (k, v) in enumerate((k, v) for k, v in d.items() if k in s):
...

即使我们忽略了丑陋的重复,所有的文字实际上都有相当长的长度,所以重复kv3次不是一种选择。最好的写法是什么?现在,我们使用以下(也是丑陋的(选项:

i = -1
for k, v in d.items():
if k not in s:
continue
i += 1
...

另一种选择:

for i, (k, v) in enumerate((k, d[k]) for k in d if k in s):
...

,但它的重复次数基本相同。

我可以使用默认提供的任何库(即没有pip install(。

只需增加一行,但复杂性要低得多,就可以完成:

for i, k in enumerate(filter(s.__contains__, d)):
v = d[k]

这种方法的一个变体使用集合交集(这可能会扰乱你的插入顺序(:

for i, k in enumerate(s & d.keys()):
v = d[k]

dict理解是过滤dict:的最快方法

filtered_dict = {key: value for key, value in d.items() if key in s}

因此,我建议定义一个任务函数来完成项目的工作,并在这个dict理解中完成所有事情:

def task(key, value):
# do the required job on the dict items
....
return result

{key: task(key, value) for key, value in d.items() if key in s}

结果是一个dict,包含每个键/值项的计算结果。当然,如果还需要索引,则可以添加enumerate

最新更新