Python 将1D列表的第一个元素与2D列表进行比较,如果找到,则添加第二个元素
此格式有两个列表-一个1D列表和一个2D列表:Python 将1D列表的第一个元素与2D列表进行比较,如果找到,则添加第二个元素,python,Python,此格式有两个列表-一个1D列表和一个2D列表: a=['1','2','3','4'] b=[['1','a'],['1','z'],['2','c'],['4','r'],['4','d']] 预期产出: [['1':'a','z'],['2':'c'],['3':'not found'],['4':'r','d']] 逻辑是我们需要获取列表“a”的每个元素,并将其与列表“b”的第一个元素进行比较。如果找到了,那么添加它(它可以出现多次,添加所有)。如果未找到,请在其前面添加“未找到” 我
a=['1','2','3','4']
b=[['1','a'],['1','z'],['2','c'],['4','r'],['4','d']]
预期产出:
[['1':'a','z'],['2':'c'],['3':'not found'],['4':'r','d']]
逻辑是我们需要获取列表“a”的每个元素,并将其与列表“b”的第一个元素进行比较。如果找到了,那么添加它(它可以出现多次,添加所有)。如果未找到,请在其前面添加“未找到”
我的尝试:
x=[]
for i in range(len(a)):
for j in range(len(b)):
if (a[i]==b[j][0]):
x.append([a[i],b[j][1]])
result=OrderedDict()
for k,v in x:
if k in result.keys():
result[k].append(v)
else:
result[k]=[v]
result=["{}\t{}\r\n".format(k, ",".join(v)) for k,v in result.items()]
我的代码的问题是,如果没有匹配的大小写,它不会打印“未找到”。
如果您有其他更好的选择,而不是多次循环,请建议。尝试为b的元素制作一个字典
from collections import defaultdict
b_dict = defaultdict(list)
for i in b:
b_dict[i[0]].append(i[1])
result = []
for a_i in a:
temp = [a_i]
if(b_dict[a_i]):
temp.extend(b_dict[a_i])
else:
temp.append('not found')
result.append(temp)
这将给出输出
[['1', 'a', 'z'], ['2', 'c'], ['3', 'not found'], ['4', 'r', 'd']]
小问题:您的“expected out”语法无效,并且肯定不代表字典列表。。请修理。@barny,对不起。我已经添加了几行,所以预期的输出现在就可以了。错误否,这是无效的:建议您实际尝试该语法,而不是编造该语法,看看Python是否接受它。让我们具体一点,“预期的输出”不是字典列表的有效代表,它对任何东西都不是有效的Python语法。