如何根据同一列表中的输入元素获取子列表中的相应元素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 我可以遵循的步骤来解决这个问题..
可以通过列表理解轻松解决:
- 解压列表中的元素
- k1 == 输入过滤器
- 获取第一个结果,如果存在的话
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])
注意:我在名称中使用了尾随下划线以避免覆盖内置函数(list
和 input
)。覆盖内置函数是不好的做法。
您可以将 filter
与 next
结合使用:
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'
我有这样的列表。
list=[[['name1','name2'],[n1,n2]], [['name3','name4'],[n3,n4]]]
如果输入是 name1
我想得到 n1类似地,如果输入 if name3 那么输出应该是 n3
Note: name1-Type str
n1- Type int
有什么方法可以做到这一点吗?..请建议我 solution/Solution 我可以遵循的步骤来解决这个问题..
可以通过列表理解轻松解决:
- 解压列表中的元素
- k1 == 输入过滤器
- 获取第一个结果,如果存在的话
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])
注意:我在名称中使用了尾随下划线以避免覆盖内置函数(list
和 input
)。覆盖内置函数是不好的做法。
您可以将 filter
与 next
结合使用:
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'