gpt4 book ai didi

python - 在这种复杂的情况下如何编写字典理解?

转载 作者:行者123 更新时间:2023-11-30 22:15:33 25 4
gpt4 key购买 nike

一个例子是人为的,但我多次遇到类似的问题。

db_file_names = ['f1', 'f2']  # list of database files

def make_report(filename):
# read the database and prepare some report object
return report_object

现在我想构造一个字典:db_version -> number_of_tables。报告对象包含我需要的所有信息。

字典理解可能如下所示:

d = {
make_report(filename).db_version: make_report(filename).num_tables
for filename in db_file_names
}

这种方法有时有效,但效率非常低:为每个数据库准备两次报告。

为了避免这种低效率,我通常使用以下方法之一:

使用临时存储:

reports = [make_report(filename) for filename in db_file_names]
d = {r.db_version: r.num_tables for r in reports}

或者使用一些适配器生成器:

def gen_data():
for filename in db_file_names:
report = make_report(filename)
yield report.db_version, report.num_tables

d = {dat[0]: dat[1] for dat in gen_data()}

但通常只有在我写了一些错误的理解之后,经过思考并意识到,在这种情况下,干净简单的理解是不可能的。

问题是,在这种情况下有没有更好的方法来创建所需的字典?

从昨天开始(当我决定发布这个问题时),我又发明了一种方法,我比其他方法更喜欢它:

d = {
report.db_version: report.num_tables
for filename in db_file_names
for report in [make_report(filename), ]
}

但即使是这个看起来也不是很好。

最佳答案

您可以使用:

d = {
r.db_version: r.num_tables
for r in map(make_report, db_file_names)
}

请注意,在Python 3中,map提供了一个迭代器,因此没有不必要的存储成本。

关于python - 在这种复杂的情况下如何编写字典理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50273538/

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