我有一个接收3个列表的函数:
DOC1:
[['ser', 'VSIS3S0', 1], ['francisco_villa', 'NP00000', 2], ['norte', 'NCMS000', 1], ['revolucion_mexicana', 'NP00000', 1], ['nombrar', 'VMP00SM', 1], ['centauro', 'NCMS000', 1]]
DOC2:
[['pintor', 'NCMS000', 1], ['ser', 'VSIS3S0', 1], ['muralista', 'AQ0CS0', 1], ['diego_rivera', 'NP00000', 1], ['frida_kahlo', 'NP00000', 1], ['caso', 'NCMS000', 1]]
CONSULTA:
[['ser', 'VSIP3S0', 1], ['francisco_villa', 'NP00000', 1], ['quien', 'NP00000', 1]]
功能:
def vectores(doc1,doc2,consulta):
res=[]
l1=[]
cont = 0
r = doc1 + doc2 + consulta
for i in r:
l1.append(i[0])
for e in doc1:
if e[0] in l1:
res.append(e[2])
else:
res.append(e[0]==0 * len(l1))
return res
[1, 2, 1, 1, 1, 1] -> res
我需要比较doc1的key [0]是否存在于l1的key [0]中,如果是这样的话,将key [2]附加到res列表,如果它们不匹配,则追加零到res list使用lenght l1
构建矢量我希望获得这样的输出:[1, 2, 1, 1, 1, 1, 0, 0, 0, ...]
- 输出向量的元素是列表的键[2]值。 - 零将是doc1的单词不在l1中。 - 一旦我有了欲望输出,我也想用doc2和consulta重复相同的程序。
提前谢谢! ;)
答案 0 :(得分:0)
嗯,我认为应该这样做,因为顺序无关紧要:
def vectores(doc1,doc2,consulta):
res=[]
l1=[]
cont = 0
r = doc1 + doc2 + consulta
for i in r:
l1.append(i[0])
res.append(0) # create the list w/ zeros
for e in doc1:
if e[0] in l1:
res.append(e[2])
else:
if e[0] not in l1:
res.append(0) # I don´t know if this is redundant
return res
res = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 1, 1]
答案 1 :(得分:0)
鉴于你在评论中给出的解释,这是我的尝试:
def vectores(doc1, doc2, consulta):
thingies = doc1 + doc2 + consulta
result = [0] * len(thingies)
for index,value in enumerate([ item[2] for item in doc1 ]):
result[index] = value
return result
print result
>>> [ 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
<--------------> <--------------> <----->
doc1 doc2 consulta
您正在将doc1
与doc1+doc2+consulta
进行比较。我仍然不知道result
如何有用,但这就是你所问的。