python - 如果每个列表元素都必须包含另一个指定值,是否有一种有效的方法可以找到两个列表元素的共享值?
问题描述
这个问题有点难以在一个问题行中简明地解释,所以我首先给出我的代码并说打印的值是正确的结果:
valin = 4
valout = 3
gdict = {
(0,3): 0,
(1,3): 1,
(2,3): 2,
(0,4): 3,
(4,3): 4,
(0,5): 5,
(5,4): 6,
(4,6): 7,
(6,3): 8,
}
keys = list(gdict)
nin = [x for x in keys if x[0]==valin]
nout = [x for x in keys if x[1]==valout]
shared_val_from_vals = [x[1] for x in nin for y in nout if x[1]==y[0]][0]
print(shared_val_from_vals)
___________________________
6
我有两个值:valin 和 valout。我在找
- 一个键,其中第 0 个元素等于 valin 和
- 第一个元素等于 valout 的另一个键和
- 第一个键的第一个元素等于第二个键的第 0 个元素
然后我会将这个共享值用于我的代码的另一部分。
尽管我的代码完成了工作,但此代码将与大型字典一起使用,所以如果可以的话,我想优化这些操作。有没有更pythonic或更简洁的方法来完成这个结果?
解决方案
遍历字典键,创建匹配每个条件的元组元素集。然后将两组相交。
set_in = {}
set_out = {}
for in_var, out_var in gdict:
if in_var == valin:
set_out.append(out_var)
if out_var == valout:
set_in.append(in_var)
shared_val = set_in.intersect(set_out).pop()
推荐阅读
- bots - 嗨有人吗?到这里一点
- notion-api - Notion API 是否有 OpenAPI 规范?
- angular - 如何以角度传递另一个组件中选择框的选定值
- vue.js - 使用 npm 更新 nuxt 后构建失败
- vb.net - 有没有办法在一个文本框中检查输入是否是字母和数字 vb.net
- angular - Is there a way to provide environment.prod.ts file in a Azure CI build pipeline while building an Angular App?
- javascript - Javascript | 根据开始和结束生成时间数组
- c++ - 为什么可变参数模板函数特化无法与相关声明匹配
- reactjs - React 中的 InputProps Material-UI
- python - 在 VS Code 中调试 Python:变量窗格保持为空