2017-10-05 82 views
0

即时通讯新的python和im未能实现这一点。按值查找列表的关键字

我列出的两个列表:

list1 = [['user1', 'id1'], ['user2', 'id2'], ['user3', 'id3']...] 
list2 = [['id1', 'group1'], ['id1', 'group2'], ['id2', 'group1'], ['id2', 'group4']...] 

而我需要的是一个单独的列表是这样的:

[['user1','id1','group1'],['user1','id1','group2'],['user2','id2','group1']] 

我想我可以遍历所有的清单和比较值,但我认为必须有一些内置函数,它允许我在列表列表中找到值并返回键或类似的东西。但我无法找到任何多维列表。

请注意,第一个列表中的idN值不一定存在于第二个列表中。

感谢您的帮助!

+1

是否有可能使用字典而不是列表? – farbiondriven

+0

一个列表来自一个休息请求,另一个来自一个LDAP搜索,即时创建它们将每个子列表附加到主列表。我想我可以制作一本字典,但我不知道如何。 – Emepese

+0

列表没有“键”,所以没有这样的内置函数。如果你想关联键值对,你应该使用'dict'。 –

回答

2

python中没有这样的东西。在numpy中有多维数组的方法,但它们并不适用于文本。

第二个清单用作字典,所以让一个

dict2 = {key:value for key, value in list2} 

然后

new_list = [[a, b, dict2[b]] for a, b in list1] 
0

如果你必须使用列表的列表,你可以使用一个理解来实现这一目标。

list1 = [['user1', 'id1'], ['user2', 'id2']] 
list2 = [['id1', 'group1'], ['id1', 'group2'], ['id2', 'group1'], ['id2', 'group4']] 

listOut = [[x[0],x[1],y[1]] for x in list1 for y in list2 if x[1] == y[0]] 

output => [['user1', 'id1', 'group1'], ['user1', 'id1', 'group2'], ['user2', 'id2', 'group1'], ['user2', 'id2', 'group4']] 
0

你可以试试这个代码:

list1 = [['user1', 'id1'], ['user2', 'id2'], ['user3', 'id3']] 
list2 = [['id1', 'group1'], ['id1', 'group2'], ['id2', 'group1'], ['id2', 'group4']] 

final_list=[] 
for sublist in list1: 
    for item in sublist: 
     for sublist1 in list2: 
      for item1 in sublist1: 
       if item==item1: 


        final_list.append(("".join(sublist[:1]),item1,"".join(sublist1[1:]))) 

print(final_list) 

输出:

[('user1', 'id1', 'group1'), ('user1', 'id1', 'group2'), ('user2', 'id2', 'group1'), ('user2', 'id2', 'group4')]