提问人:user19375127 提问时间:6/20/2022 最后编辑:user19375127 更新时间:6/21/2022 访问量:105
如何遍历一个嵌套列表,比较匹配的特定元素,根据匹配创建具有特定不同元素的字典?
How to iterate over one nested list, compare specific elements for a match, create a dictionary with specific different elements based on the match?
问:
我对 Python 非常陌生,正在寻求帮助:我有一个嵌套列表:
[['t', '=', 'a', '+1', 'b'], ['s', '=', 'd', '+2', 'e'], ['p', '=', 't', '*1', 'c'], ['q', '=', 's', '/1', 'f'], ['y', '=', 'p', '-1', 'q']]
.
我想将每个子列表的每个第 1 个元素与所有子列表的所有第 3 个和第 5 个元素进行比较以找到匹配项。例如:作为第 1 个子列表中的第 1 个元素与(每个子列表的第 3 个和第 5 个元素)进行比较,以在元素中找到潜在的匹配项。然后我比较(第 2 个子列表的第 1 个元素)与所有子列表的第 3 个和第 5 个元素。我重复此操作,直到我将每个子列表的所有第 1 个元素与所有子列表的每个第 3 个和第 5 个元素进行比较。't'
'a', 'b', 'd', 'e', 't', 'c', 's', 'f', 'p', 'q'
's'
之后,无论我在哪里找到匹配项(例如,当第一个子列表中的第一个元素被定位为第三个子列表中的第三个元素时,等等),我想将这 2 个子列表中的第 4 个元素(运算符)连接在一起作为字典来表示图形的节点。例如,对于在子列表 1 和 3 中找到的匹配项,运算符(子列表 1 中的第 4 个元素)将是“键”,运算符(子列表 3 中的第 4 个元素)将是字典的相应“值”。同样,对于找到的匹配项,和将是键值对,对于找到的匹配项,将连接,依此类推,直到比较所有第 1 元素子列表以查找匹配项。't'
't'
+1
*1
's'
'+2'
'/1'
'p'
'*1'
'-1'
我尝试了以下方法,但它返回一个空列表[]作为输出:
op_connector1 = []
#I 现在创建了一个空列表来收集图节点的所有所需运算符,但最终想要一个字典,就像我上面所说的那样。
list = [['t', '=', 'a', '+1', 'b'], ['s', '=', 'd', '+2', 'e'], ['p', '=', 't', '*1', 'c'], ['q', '=', 's', '/1', 'f'], ['y', '=', 'p', '-1', 'q']]
for i in range(len(list)):
if (list[i][0] == list[i][2]) or (list[i][0] == list[i][4]):
op_connector1.append(i[i][3])
print("\n", op_connector1)
所需输出:
{'+1': '*1', '+2': '/1', '*1': '-1', '/1': '-1'}
将不胜感激。提前致谢。
答:
试试那个
super_arr=[
['t', '=', 'a', '+1', 'b'],
['s', '=', 'd', '+2', 'e'],
['p', '=', 't', '*1', 'c'],
['q', '=', 's', '/1', 'f'],
['y', '=', 'p', '-1', 'q']
]
def compare_list(super_array):
dict={}
for array in super_array:
for each_list in super_array:
if array[0] in (each_list[2],each_list[4]):
dict[array[3]]=each_list[3]
return dict
#calling the function and printing its output
print(compare_list(super_arr))
output:
{'+1': '*1', '+2': '/1', '*1': '-1', '/1': '-1'}
或者
super_arr=[
['t', '=', 'a', '+1', 'b'],
['s', '=', 'd', '+2', 'e'],
['p', '=', 't', '*1', 'c'],
['q', '=', 's', '/1', 'f'],
['y', '=', 'p', '-1', 'q']
]
def compare_list(super_array):
dict={}
for array in super_array:
subdict={}
for each_list in super_array:
if array[0] in (each_list[2],each_list[4]):
subdict[array[3]]=each_list[3]
dict[array[0]]=subdict
return dict
#calling the function and printing its output
print(compare_list(super_arr))
Output:
{'t': {'+1': '*1'}, 's': {'+2': '/1'}, 'p': {'*1': '-1'}, 'q': {'/1': '-1'}, 'y': {}}
使用列表推导式,该函数可以写成
def compare_list(super_array):
dict={}
for array in super_array:
x={array[3]:each_list[3] for each_list in super_array if array[0] in (each_list[2],each_list[4])}
dict[array[0]]=x
return dict
对于重复的密钥,可以使用以下函数
def compare_list(super_array):
list_of_dicts=[]
for array in super_array:
subdict={}
for each_list in super_array:
if array[0] in (each_list[2],each_list[4]):
subdict[array[3]]=each_list[3]
list_of_dicts.append(f'{array[0]}:{subdict}')
# dict[array[0]]=subdict
return list_of_dicts
output:
["t:{'+1': '+2'}", "t:{'+1': '*1'}", "s:{'+2': '/1'}", "p:{'*1': '-1'}", "q:{'/1': '-1'}"]
评论
if array[0] in (each_list[2], each_list[4])
下一个:Python - 如何删除嵌套键
评论