Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要项目索引时的Python列表理解_Python_List_List Comprehension - Fatal编程技术网

需要项目索引时的Python列表理解

需要项目索引时的Python列表理解,python,list,list-comprehension,Python,List,List Comprehension,我正试图为下面的代码片段编写相应的列表 # Initialize data. queryRelDict = {'1': [1, 2, 3], '2': [4, 5, 6], '3': [11, 13, 14]} related_docs_indices = [1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14] relOrNot = [0] * k for item in queryRelDict.keys():

我正试图为下面的代码片段编写相应的列表

# Initialize data.
queryRelDict = {'1': [1, 2, 3],
                '2': [4, 5, 6],
                '3': [11, 13, 14]}
related_docs_indices = [1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14]

relOrNot = [0] * k
for item in queryRelDict.keys():
    for i in range(len(related_docs_indices)):
        if related_docs_indices[i] + 1 in queryRelDict[item]:
            relOrNot[i] = 1  
基本上我有一个字典,每个键都有一个列表作为它的值。现在我的列表
relOrNot[i]
需要为1,如果
related\u index
ith
元素在字典中的任一列表中

所需输出为:

[1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1]
我尝试了以下两种变体,但无法获得所需的输出

relOrNot2 = [1 for item in queryRelDict.keys() for i in range(len(related_docs_indices)) if related_docs_indices[i] + 1 in queryRelDict[item]]
但结果是

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
我也试过了

relOrNot2 = [1 if related_docs_indices[i] + 1 in queryRelDict[item] else 0 for item in queryRelDict.keys() for i in range(len(related_docs_indices))]
相应的输出:

[0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]

需要进行哪些修改才能获得所需的输出?

如果所需的输出是一个列表
relOrNot
,其中
relOrNot[i]
是1,如果
相关文档索引的第i个元素在字典
queryRelDict
中的任一列表中(那么它的长度必须与相关文档索引的长度相同),然后可以执行以下操作:

# first create one flat list with all elements of the sublists in the dictionary
flatlist = [i for sublist in queryRelDict.itervalues() for i in sublist]
relOrNot = [1 if i in flatlist else 0 for i in related_docs_indices]
# [1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1]

如果您所需的输出是一个列表
relOrNot
,其中
relOrNot[i]
为1,如果
相关文档索引的第i个元素
位于字典
queryRelDict
中的任何一个列表中(那么它的长度必须与
相关文档索引
),则您可以执行以下操作:

# first create one flat list with all elements of the sublists in the dictionary
flatlist = [i for sublist in queryRelDict.itervalues() for i in sublist]
relOrNot = [1 if i in flatlist else 0 for i in related_docs_indices]
# [1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1]

对于每个键,您都在迭代相关的文档索引,并检查该键的值集中是否有匹配的值。对于键“1”,它将如下所示:

key 1 values = [1, 2, 3]

related_docs_indices = [
    1, # 1 (match)
    2, # 1 (match)
    3, # 1 (match)
    4, # 0 (no match)
    5, # 0 (no match)
    6, # 0 (no match)
    7, # 0 (no match)
    8, # 0 (no match)
    12, # 0 (no match) 
    13, # 0 (no match)
    14] # 0 (no match)
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,  # key '1'
 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,  # key '2'
 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]  # key '3'

keys = queryRelDict.keys()
keys.sort()
>>> [1 if i in queryRelDict.get(item) else 0 
     for item in keys for i in related_docs_indices]
#[1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14] related_doc_indices
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,  # key '1' values: [1, 2, 3]
 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,  # key '2' values: [4, 5, 6]
 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]  # key '3' values: [11, 13, 14] (note 11 is not in related_doc_indices)
因此,该键的期望输出应为:

[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
您遇到的一个问题是,键在字典中是无序的,因此较长列表的结果可能会因键的随机顺序而异。例如:

>>> queryRelDict.keys()
['1', '3', '2']
假设您首先对键进行排序,然后我相信所需的输出应该如下所示:

key 1 values = [1, 2, 3]

related_docs_indices = [
    1, # 1 (match)
    2, # 1 (match)
    3, # 1 (match)
    4, # 0 (no match)
    5, # 0 (no match)
    6, # 0 (no match)
    7, # 0 (no match)
    8, # 0 (no match)
    12, # 0 (no match) 
    13, # 0 (no match)
    14] # 0 (no match)
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,  # key '1'
 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,  # key '2'
 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]  # key '3'

keys = queryRelDict.keys()
keys.sort()
>>> [1 if i in queryRelDict.get(item) else 0 
     for item in keys for i in related_docs_indices]
#[1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14] related_doc_indices
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,  # key '1' values: [1, 2, 3]
 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,  # key '2' values: [4, 5, 6]
 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]  # key '3' values: [11, 13, 14] (note 11 is not in related_doc_indices)

对于每个键,您都在迭代相关的文档索引,并检查该键的值集中是否有匹配的值。对于键“1”,它将如下所示:

key 1 values = [1, 2, 3]

related_docs_indices = [
    1, # 1 (match)
    2, # 1 (match)
    3, # 1 (match)
    4, # 0 (no match)
    5, # 0 (no match)
    6, # 0 (no match)
    7, # 0 (no match)
    8, # 0 (no match)
    12, # 0 (no match) 
    13, # 0 (no match)
    14] # 0 (no match)
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,  # key '1'
 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,  # key '2'
 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]  # key '3'

keys = queryRelDict.keys()
keys.sort()
>>> [1 if i in queryRelDict.get(item) else 0 
     for item in keys for i in related_docs_indices]
#[1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14] related_doc_indices
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,  # key '1' values: [1, 2, 3]
 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,  # key '2' values: [4, 5, 6]
 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]  # key '3' values: [11, 13, 14] (note 11 is not in related_doc_indices)
因此,该键的期望输出应为:

[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
您遇到的一个问题是,键在字典中是无序的,因此较长列表的结果可能会因键的随机顺序而异。例如:

>>> queryRelDict.keys()
['1', '3', '2']
假设您首先对键进行排序,然后我相信所需的输出应该如下所示:

key 1 values = [1, 2, 3]

related_docs_indices = [
    1, # 1 (match)
    2, # 1 (match)
    3, # 1 (match)
    4, # 0 (no match)
    5, # 0 (no match)
    6, # 0 (no match)
    7, # 0 (no match)
    8, # 0 (no match)
    12, # 0 (no match) 
    13, # 0 (no match)
    14] # 0 (no match)
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,  # key '1'
 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,  # key '2'
 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]  # key '3'

keys = queryRelDict.keys()
keys.sort()
>>> [1 if i in queryRelDict.get(item) else 0 
     for item in keys for i in related_docs_indices]
#[1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14] related_doc_indices
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,  # key '1' values: [1, 2, 3]
 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,  # key '2' values: [4, 5, 6]
 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]  # key '3' values: [11, 13, 14] (note 11 is not in related_doc_indices)

创建一个包含所有键和所有值的集合,在循环中只需查看集合中是否包含所需的值

s = set()
for (k,v) in queryRelDict.items():
    s.add(int(k))# because your keys are string
    s = s | set(v)
map(lambda x:1 if x in s else 0, related_docs_indices)

=>[1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1]

创建一个包含所有键和所有值的集合,在循环中只需查看集合中是否包含所需的值

s = set()
for (k,v) in queryRelDict.items():
    s.add(int(k))# because your keys are string
    s = s | set(v)
map(lambda x:1 if x in s else 0, related_docs_indices)

=>[1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1]

如果您想要一行:)


relOrNot=[1如果集合()中的v.union(*queryRelDict.values())中的v为0,则相关文档索引中的v为0]

如果您想要一行:)


relOrNot=[1如果set().union(*queryRelDict.values())中的v为0,则相关文档索引中的v为0]

我无法理解所需的输出。它的长度与相关文档索引的长度不一样。不要这样做-你的代码本来就很好(尤其是在可读性方面);列表理解将违反Python的禅宗思想。您确定这是您想要的输出吗?它的长度是30,但在长度为11的索引上迭代三个键。期望的结果不应该是长度33吗?不清楚期望的输出是什么“现在我的列表relOrNot[i]需要是1,如果相关文档索引的第i个元素在字典中的任一列表中”。。。这不是你所说的你想要的输出,我无法理解你想要的输出。它的长度与相关文档索引的长度不一样。不要这样做-你的代码本来就很好(尤其是在可读性方面);列表理解将违反Python的禅宗思想。您确定这是您想要的输出吗?它的长度是30,但在长度为11的索引上迭代三个键。期望的结果不应该是长度33吗?不清楚期望的输出是什么“现在我的列表relOrNot[i]需要是1,如果相关文档索引的第i个元素在字典中的任一列表中”。。。这不是您所声称的期望输出