首页 > 解决方案 > 如果每个列表元素都必须包含另一个指定值,是否有一种有效的方法可以找到两个列表元素的共享值?

问题描述

这个问题有点难以在一个问题行中简明地解释,所以我首先给出我的代码并说打印的值是正确的结果:

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。我在找

  1. 一个键,其中第 0 个元素等于 valin 和
  2. 第一个元素等于 valout 的另一个键
  3. 第一个键的第一个元素等于第二个键的第 0 个元素

然后我会将这个共享值用于我的代码的另一部分。

尽管我的代码完成了工作,但此代码将与大型字典一起使用,所以如果可以的话,我想优化这些操作。有没有更pythonic或更简洁的方法来完成这个结果?

标签: pythonlistdictionaryoptimizationlist-comprehension

解决方案


遍历字典键,创建匹配每个条件的元组元素集。然后将两组相交。

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()

推荐阅读