从 python 中列表的列表创建列表
Creating a list from list of a list in python
我正在创建一个树状结构,其中每个叶节点都有 5 个文档。要获取父节点的文档,子节点的所有文档都将分配给它。
例如A 是父节点,B、C 是子节点,它们各有 5 个文档。因此,A 的文档将是 5+5=10。同理,A的父节点会得到A的10个文档+A的兄弟节点的一个文档的no。重复此操作,直到到达根节点。
我想将 A 的文档存储为大小为 10 的列表,类似地,将 A 的父级存储为他们子级的文档总数。但它将其存储为大小为 2 的列表,并且在每个列表下,每个都有 5 个文档。 A 的父级也将 A 的文档存储为 3 个列表,而不是 3*5=15
我想要的。
如何将每个节点的文档存储为文档总数而不是列表列表?
下面是我正在使用的代码。
from anytree import Node, RenderTree
import pandas as pd
import numpy as np
class Node(Node):
Node.documents = None
Node.vector = None
### Creating tree by giving documnets to leaf ###
### Tree Creation ###
# L1
Finance = Node("Finance")
# L2
Credit_and_Lending = Node("Credit and Lending", parent=Finance)
# L3
Credit_Cards = Node("Credit Cards", parent=Credit_and_Lending)
Loans = Node("Loans", parent=Credit_and_Lending)
# L4
Low_Interest_and_No_Interest_Credit_Cards = Node("Low Interest & No Interest Credit Cards", parent=Credit_Cards, documents=[(fvc.loc[(fvc['keyword']=='low interest & no interest credit cards') & (fvc['organic_rank']==1)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='low interest & no interest credit cards') & (fvc['organic_rank']==2)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='low interest & no interest credit cards') & (fvc['organic_rank']==3)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='low interest & no interest credit cards') & (fvc['organic_rank']==4)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='low interest & no interest credit cards') & (fvc['organic_rank']==5)])['vocab'].tolist()[0]])
Rewards_Cards = Node("Rewards Cards", parent=Credit_Cards, documents=[(fvc.loc[(fvc['keyword']=='rewards cards') & (fvc['organic_rank']==1)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='rewards cards') & (fvc['organic_rank']==2)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='rewards cards') & (fvc['organic_rank']==3)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='rewards cards') & (fvc['organic_rank']==4)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='rewards cards') & (fvc['organic_rank']==5)])['vocab'].tolist()[0]])
Student_Credit_Cards = Node("Student Credit Cards", parent=Credit_Cards, documents=[(fvc.loc[(fvc['keyword']=='student credit cards') & (fvc['organic_rank']==1)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='student credit cards') & (fvc['organic_rank']==2)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='student credit cards') & (fvc['organic_rank']==3)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='student credit cards') & (fvc['organic_rank']==4)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='student credit cards') & (fvc['organic_rank']==5)])['vocab'].tolist()[0]])
Auto_Financing = Node("Auto Financing", parent=Loans, documents=[(fvc.loc[(fvc['keyword']=='auto financing') & (fvc['organic_rank']==1)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='auto financing') & (fvc['organic_rank']==2)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='auto financing') & (fvc['organic_rank']==3)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='auto financing') & (fvc['organic_rank']==4)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='auto financing') & (fvc['organic_rank']==5)])['vocab'].tolist()[0]])
Commercial_Lending = Node("Commercial Lending", parent=Loans, documents=[(fvc.loc[(fvc['keyword']=='commercial lending') & (fvc['organic_rank']==1)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='commercial lending') & (fvc['organic_rank']==2)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='commercial lending') & (fvc['organic_rank']==3)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='commercial lending') & (fvc['organic_rank']==4)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='commercial lending') & (fvc['organic_rank']==5)])['vocab'].tolist()[0]])
##### Visualizing the created tree #####
for pre, fill, node in RenderTree(Finance):
print("%s%s" % (pre, node.name))
##### Getting documents for parent nodes #####
def get_documents(node):
if node.documents is not None:
return node.documents
else:
child_nodes = node.children
lis = []
for child in child_nodes:
child_docs = get_documents(child)
lis.append(child_docs)
node.documents = lis
return lis
get_documents(Finance)
您可以使用以下语法:
lis = lis + child_docs
而不是
lis.append(child_docs)
我正在创建一个树状结构,其中每个叶节点都有 5 个文档。要获取父节点的文档,子节点的所有文档都将分配给它。
例如A 是父节点,B、C 是子节点,它们各有 5 个文档。因此,A 的文档将是 5+5=10。同理,A的父节点会得到A的10个文档+A的兄弟节点的一个文档的no。重复此操作,直到到达根节点。
我想将 A 的文档存储为大小为 10 的列表,类似地,将 A 的父级存储为他们子级的文档总数。但它将其存储为大小为 2 的列表,并且在每个列表下,每个都有 5 个文档。 A 的父级也将 A 的文档存储为 3 个列表,而不是 3*5=15
我想要的。
如何将每个节点的文档存储为文档总数而不是列表列表? 下面是我正在使用的代码。
from anytree import Node, RenderTree
import pandas as pd
import numpy as np
class Node(Node):
Node.documents = None
Node.vector = None
### Creating tree by giving documnets to leaf ###
### Tree Creation ###
# L1
Finance = Node("Finance")
# L2
Credit_and_Lending = Node("Credit and Lending", parent=Finance)
# L3
Credit_Cards = Node("Credit Cards", parent=Credit_and_Lending)
Loans = Node("Loans", parent=Credit_and_Lending)
# L4
Low_Interest_and_No_Interest_Credit_Cards = Node("Low Interest & No Interest Credit Cards", parent=Credit_Cards, documents=[(fvc.loc[(fvc['keyword']=='low interest & no interest credit cards') & (fvc['organic_rank']==1)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='low interest & no interest credit cards') & (fvc['organic_rank']==2)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='low interest & no interest credit cards') & (fvc['organic_rank']==3)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='low interest & no interest credit cards') & (fvc['organic_rank']==4)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='low interest & no interest credit cards') & (fvc['organic_rank']==5)])['vocab'].tolist()[0]])
Rewards_Cards = Node("Rewards Cards", parent=Credit_Cards, documents=[(fvc.loc[(fvc['keyword']=='rewards cards') & (fvc['organic_rank']==1)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='rewards cards') & (fvc['organic_rank']==2)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='rewards cards') & (fvc['organic_rank']==3)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='rewards cards') & (fvc['organic_rank']==4)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='rewards cards') & (fvc['organic_rank']==5)])['vocab'].tolist()[0]])
Student_Credit_Cards = Node("Student Credit Cards", parent=Credit_Cards, documents=[(fvc.loc[(fvc['keyword']=='student credit cards') & (fvc['organic_rank']==1)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='student credit cards') & (fvc['organic_rank']==2)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='student credit cards') & (fvc['organic_rank']==3)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='student credit cards') & (fvc['organic_rank']==4)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='student credit cards') & (fvc['organic_rank']==5)])['vocab'].tolist()[0]])
Auto_Financing = Node("Auto Financing", parent=Loans, documents=[(fvc.loc[(fvc['keyword']=='auto financing') & (fvc['organic_rank']==1)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='auto financing') & (fvc['organic_rank']==2)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='auto financing') & (fvc['organic_rank']==3)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='auto financing') & (fvc['organic_rank']==4)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='auto financing') & (fvc['organic_rank']==5)])['vocab'].tolist()[0]])
Commercial_Lending = Node("Commercial Lending", parent=Loans, documents=[(fvc.loc[(fvc['keyword']=='commercial lending') & (fvc['organic_rank']==1)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='commercial lending') & (fvc['organic_rank']==2)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='commercial lending') & (fvc['organic_rank']==3)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='commercial lending') & (fvc['organic_rank']==4)])['vocab'].tolist()[0]
, (fvc.loc[(fvc['keyword']=='commercial lending') & (fvc['organic_rank']==5)])['vocab'].tolist()[0]])
##### Visualizing the created tree #####
for pre, fill, node in RenderTree(Finance):
print("%s%s" % (pre, node.name))
##### Getting documents for parent nodes #####
def get_documents(node):
if node.documents is not None:
return node.documents
else:
child_nodes = node.children
lis = []
for child in child_nodes:
child_docs = get_documents(child)
lis.append(child_docs)
node.documents = lis
return lis
get_documents(Finance)
您可以使用以下语法:
lis = lis + child_docs
而不是
lis.append(child_docs)