brightway - 将 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 的活动分配给变量并访问或将其属性(例如名称、交换等)添加到列表或字典?
解决方案
假设您分配给 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 循环迭代交换。
推荐阅读
- rabbitmq - 阅读一些插件时出现问题:duplicate_plugin
- java - 由 android.content.res.Resources$NotFoundException: Drawable (missing name) with resource ID 即使资源在那里
- python - Plotly - 在循环中生成数字;将所有图形放在单个子图中
- haskell - 创建一个函数 ved 仅使用递归删除列表中最大项目的最后一次出现
- sql - 有两个字段,如何保持唯一元素 2 值的最大数量,但不重复任何元素 1?
- java - 在这种情况下,有没有办法在不导入特定类的情况下导入所有类?
- docker - 连接到在 docker 容器中运行的 postgres
- sql-server - 如果字段为空,如何使用列名构建分隔字符串?
- python - TypeError:load() 缺少 1 个必需的位置参数:Google Colab 中的“Loader”
- python - 与python相比,如何从android中的mp3获取完全相同的pcm数据?