有没有一种有效的方法可以找到两个列表元素的共享值,前提是每个列表元素都必须包含另一个指定的值



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

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

我有两个值:缬氨酸和缬氨酸。我在找

  1. 一个键,其中第0个元素等于缬氨酸和
  2. 另一个键,其中第一个元素等于valout,并且
  3. 第一个键的第一个元素等于第二个键的第0个元素

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

虽然我的代码完成了任务,但这些代码将与大型字典一起使用,所以如果可以的话,我想优化这些操作。有没有一种更像蟒蛇或更简洁的方法来实现这个结果?

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

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

您只能通过使用单个for循环来压缩它:

nin_out = [x for x in keys if x[0]==valin or x[1]==valout]
shared_val_from_vals = [x[1] for x in nin_out for y in nin_out if x[1]==y[0]][0]

最新更新