首页 > 解决方案 > 将 ecoinvent 中的活动分配给变量并访问活动的属性

问题描述

我想检索活动的所有输入和输出的名称(可能还有其他信息)。据我了解,这将使我能够了解电力生产组合由哪些单独的投入组成。

首先,我选择一个数据库ecoinvent_db = bw.Database('ecoinvent 3.7.1_cutoff')并搜索可能与我的目标相关的活动。

输入:

ecoinvent_db.search('electricity production mix')

输出:

['electricity, high voltage, production mix' (kilowatt hour, CH, None),
 'electricity, high voltage, production mix' (kilowatt hour, AU, None),
 'electricity, high voltage, production mix' (kilowatt hour, TZ, None),
 'electricity, high voltage, production mix' (kilowatt hour, TH, None),
 'electricity, high voltage, production mix' (kilowatt hour, MT, None),
 'electricity, high voltage, production mix' (kilowatt hour, RU, None),
 'electricity, high voltage, production mix' (kilowatt hour, PE, None),
 'electricity, high voltage, production mix' (kilowatt hour, IR, None),
 'electricity, high voltage, production mix' (kilowatt hour, MX, None),
 'electricity, high voltage, production mix' (kilowatt hour, JP, None),
 'electricity, high voltage, production mix' (kilowatt hour, CL, None),
 'electricity, high voltage, production mix' (kilowatt hour, CY, None),
 'electricity, high voltage, production mix' (kilowatt hour, MY, None),
 'electricity, high voltage, production mix' (kilowatt hour, UA, None),
 'electricity, high voltage, production mix' (kilowatt hour, IS, None),
 'electricity, high voltage, production mix' (kilowatt hour, TW, None),
 'electricity, high voltage, production mix' (kilowatt hour, KR, None),
 'electricity, high voltage, production mix' (kilowatt hour, SA, None),
 'electricity, high voltage, production mix' (kilowatt hour, ID, None),
 'electricity, high voltage, production mix' (kilowatt hour, ZA, None),
 'electricity, high voltage, production mix' (kilowatt hour, CA-YK, None),
 'electricity, high voltage, production mix' (kilowatt hour, CA-ON, None),
 'electricity, high voltage, production mix' (kilowatt hour, CA-PE, None),
 'electricity, high voltage, production mix' (kilowatt hour, CA-NF, None),
 'electricity, high voltage, production mix' (kilowatt hour, CA-NS, None)]

接下来,我想将这些活动之一分配给一个变量(我可以稍后在循环中执行此操作)。在其中一个示例笔记本中,通过 将活动分配给变量database.get()。然而,在笔记本给出的示例中,活动的名称只是一个字符串。在 ecoinvent 的情况下,活动的名称不是唯一的,db.search(str)并将给定的活动返回为'activity_name' (unit, region, None)'.

如果我使用ecoinvent_db.get()括号中的上述输出之一,则会收到ActivityDatasetDoesNotExist错误消息。

我可以选择一个随机活动并通过以下方式打印名称:

activity = bw.Database("ecoinvent 3.7.1_cutoff").random()

for exchange in activity.exchanges():
    print(exchange)

但是,activity_exchanges = list(activity.exchanges())只会产生以下内容。

在此处输入图像描述

如何将来自 ecoinvent 的活动分配给变量并访问或将其属性(例如名称、交换等)添加到列表或字典?

标签: brightway

解决方案


假设您分配给 ecoinvent 的名称是

MY_DB_NAME == 'ecoinvent 3.7.1_cutoff'

我建议您遍历活动以查找您想要的内容,而不是使用搜索。例如,这将返回一个活动对象:

elec_example = next(act for act in bw2data.Database(MY_DB_NAME) if act['name'] == 'electricity, high voltage, production mix')

选择列表中的一个值也可以。

活动的键是一个包含数据库名称和唯一(在数据库内)代码的元组。您也可以使用get_activity带有活动键的函数或使用get数据库的方法来检索活动(如果您知道键或代码)。

assert bw2data.get_activity(elec_example.key) == elec_example
assert bw2data.Database(MY_DB_NAME).get(elec_example['code']) == elec_example

您可以访问与活动对象关联的不同数据。例如elec_example['name']

方法 .exchanges() 返回一个可迭代对象。您可以简单地使用交换列表list(elec_example.exchanges())或使用 for 循环迭代交换。


推荐阅读