如何根据同一列表中的输入元素获取子列表中的相应元素python

How get corresponding element in sub list based on input element from the same list python

我有这样的列表。

list=[[['name1','name2'],[n1,n2]], [['name3','name4'],[n3,n4]]]

如果输入是 name1

我想得到 n1

类似地,如果输入 if name3 那么输出应该是 n3

Note: name1-Type str
      n1-   Type int

有什么方法可以做到这一点吗?..请建议我 solution/Solution 我可以遵循的步骤来解决这个问题..

可以通过列表理解轻松解决:

  1. 解压列表中的元素
  2. k1 == 输入过滤器
  3. 获取第一个结果,如果存在的话
input_ = "name1"
list_ = [[['name1','name2'],[n1,n2]], [['name3','name4'],[n3,n4]]]
candidates = [v1 
              for (k1, _), (v1, _) in list_
              if k1 == input_]
if len(candidates) == 0:
    print("No such key: " + input_)
else:
    print("Value is " + candidates[0])

注意:我在名称中使用了尾随下划线以避免覆盖内置函数(listinput)。覆盖内置函数是不好的做法。

您可以将 filternext 结合使用:

def get_item_from_key(input_list, key):
    """Return item corresponding to a specific key"""
    try:
        return next(filter(lambda x: x[0][0] == key, input_list))[1][0]
    except StopIteration:
        return None

因此,如果输入列表是 a = [[['name1', 'name2'], [0, 1]], [['name3', 'name4'], [2, 3]]],您可以询问您感兴趣的任何键:

get_item_from_key(a, 'name1')  # this will return 0
get_item_from_key(a, 'name3')  # this will return 2
get_item_from_key(a, 'name2')  # this will return None
get_item_from_key(a, 'name5')  # this will return None

我看到从 my_list 构建一个中间查找字典,然后随意查找:

my_list=[
  [['name1','name2'],['n1','n2']], 
  [['name3','name4'],['n3','n4']]
]

lookup = {}

for double_tuple in my_list:
    lhs, rhs = double_tuple
    zipped = zip(lhs, rhs)  # ['name1','name2'],['n1','n2'] → ['name1', 'n1'],['name2','n2']
    lookup.update(dict(zipped))

print(lookup['name1'])  # → 'n1'