python - 如何根据键的字符串提取字典的键?
问题描述
由于优化运行,我有以下变量字典。https://i.stack.imgur.com/pIA7i.jpg
我想提取 l 索引为 0 ( l as in 'FEq_(i,_j,_k,_l)'
) 的键的值,以便将它们与值 A 相乘,并提取键的值,l!=0
以便将它们与值 B 相乘。
我一直在尝试这样:
for l in [0]:
print(varsdict["FEq_({0},_{1},_{2},_{3})".format(i,j,k,l)])
但这不起作用,因为其余索引不会因此迭代其所有初始范围值。我也找不到我看过的类似性质的东西。最有效的方法是什么?
解决方案
提取其中的值l == '0'
:
vals_0 = [varsdict[k] for k in varsdict if k.split('_')[-1][:-1] == '0']
要提取其他值(其中l
具有除 0 以外的任何值):
other_vals = [varsdict[k] for k in varsdict if k.split('_')[-1][:-1] != '0']
说明:
由于您的字典键是格式为 的字符串,因此'FEq_(i,_j,_k,_l)'
usingsplit('_')
将返回一个列表,其中包含'_'
, 即['FEq', '(i,', 'j,', 'k,', 'l)']
.
然后我们使用[-1]
选择此列表中的最后一个元素,即字符串'l)'
。
现在我们使用切片[:-1]
来选择这个字符串中除了最后一个(将是)
字符)之外的所有字符,最后返回'l'
.
请注意,无论l
.
推荐阅读
- r - 如果条件出现缺失值错误
- c++ - 使用 SwapBuffers 拦截绘制 OpenGL 叠加层
- laravel - Laravel 8 使用工厂使用播种机将数据添加到数据透视表
- mysql - 基于连接表的“BETWEEN”条件动态计数的 SQL 选择
- python - 实例变量差异(Python)
- laravel-livewire - 测试 Laravel Livewire 排序组件
- react-native - 标题后退按钮未显示在堆栈屏幕中
- c# - 在 C# 中使用 Nhibernate 标准过滤多个值
- node.js - cosmosdb 中的相关 ID - Azure 诊断表(日志分析)
- python - ResNet object has no attribute 'predict'