Python 구조 트 리 구 조 는 도시 등급 코드 에 응용 된다.
41238 단어 Python파일 읽 기와 쓰기
응용 배경
실제 장면 응용 에서 일부 데이터 에 대해 등급 인 코딩 을 해 야 한다.이 럴 때 트 리 구 조 를 사용 하여 이 실현 을 지원 해 야 한다.여기 서 전형 적 인 응용 예 를 들 어 전국 도시 에 대한 등급 코드 를 제시한다.예 를 들 어 전국 아래 에 34 개의 성급 행정구 가 있 는데 호북성 을 예 로 들 면 호북성 아래 에 15 개의 성 관할 시 나 주가 있 고 각 시 아래 에 몇 개의 구역 이나 현 이 있다.이러한 매우 흔히 볼 수 있 는 등급 구 조 는 하나의 숫자 로 표시 할 수 있 으 며,여 기 는 Python 을 사용 하여 나무의 구 조 를 실현 할 수 있다.
데이터 샘플
도시 견본 파일 데이터(여 기 는 부분 일 뿐)를 정의 합 니 다.각 줄 의 기록 은 각 기록 에서 서로 다른 등급 으로 쉼표 로 구분 합 니 다.
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
나무의 구조
우 리 는 트 리 의 노드 를 정의 합 니 다.다음 과 같은 몇 가지 요 소 를 포함 합 니 다.
명칭.
유형
묘사 하 다.
묘사 하 다.
name
String
명칭
"운남성"
index
String
노드 번호 값 의 경로,루트 노드 에서 이 노드 의 경로
“0|11|1101|110101”
value
String
노드 번호 의 값
“110101”
children
array
노드 의 아이 노드
[“110101”,“110102”,“110103”]
부호화 규칙
우 리 는 인 코딩 규칙 을 정의 합 니 다.먼저 정렬 파일 을 텍스트 에 따라 정렬 합 니 다.그러면 각 성의 데이터 가 집중 되 고 정렬 된 다음 에'전국'의 value 를'0'으로 설정 한 다음 에 1 급 디 렉 터 리(성)value 는'10'에서 시작 하고 2 급 디 렉 터 리(시)의 value 는 대응 하 는 1 급 디 렉 터 리*100 에서 시작 합 니 다.3 급 4 급 은 순서대로 유추 한다.
트 리 노드 코드
class Node(object):
def __init__(self, name, value="0", index="0"):
self.name = name
self.index = index
self.value = value
self.children = []
#
def search(self, node):
if self.name == node.name:
return self
if not self.children:
return None
else:
for child in self.children:
childres = child.search(node)
if childres:
return childres
return None
def add_child(self, node):
self.children.append(node)
def set_value(self, value):
self.value = value
def set_index(self, index):
self.index = index
# json
def to_json(self):
res = {}
res['value'] = self.value
res['name'] = self.name
res['index'] = self.index
res['children'] = []
for child in self.children:
res['children'].append(child.to_json())
return res
#
def index_display(self, index):
if self.index == index:
print(self.name)
if self.children:
for child in self.children:
child.index_display(index)
트 리 생 성 과정
def create_tree_from_local_file():
first_no = 10 # 10 , *100 ,
root_node = Node(" ", index="0") #
path = "your file path" # ,
for line in open(path encoding="utf-8"):
lines = line.strip("\r
").split(",")
first_node = Node(lines[0]) #
if first_node.name not in [child.name for child in root_node.children]:
first_node.set_value(str(first_no))
first_node.set_index(root_node.index + "|" + first_node.value)
first_no = first_no + 1
root_node.add_child(first_node)
cur_node = root_node.search(first_node)
for node in [Node(name=tmp) for tmp in lines[1:]]: #
if node.name not in [child.name for child in cur_node.children]:
length = len(cur_node.children)
node.set_value(str(length + 100 * int(cur_node.value)))
node.set_index(cur_node.index + "|" + node.value)
cur_node.add_child(node)
cur_node = root_node.search(node)
print(root_node.to_json())
실행 결과
{
"value": "0",
"name": " ",
"index": "0",
"children": [
{
"value": "10",
"name": " ",
"index": "0|10",
"children": [
{
"value": "1000",
"name": " ",
"index": "0|10|1000",
"children": [
{
"value": "100000",
"name": " ",
"index": "0|10|1000|100000",
"children": [ ]
},
{
"value": "100001",
"name": " ",
"index": "0|10|1000|100001",
"children": [ ]
},
{
"value": "100002",
"name": " ",
"index": "0|10|1000|100002",
"children": [ ]
},
{
"value": "100003",
"name": " ",
"index": "0|10|1000|100003",
"children": [ ]
},
{
"value": "100004",
"name": " ",
"index": "0|10|1000|100004",
"children": [ ]
}
]
}
]
},
{
"value": "11",
"name": " ",
"index": "0|11",
"children": [
{
"value": "1100",
"name": " ",
"index": "0|11|1100",
"children": [
{
"value": "110000",
"name": " ",
"index": "0|11|1100|110000",
"children": [ ]
},
{
"value": "110001",
"name": " ",
"index": "0|11|1100|110001",
"children": [ ]
},
{
"value": "110002",
"name": " ",
"index": "0|11|1100|110002",
"children": [ ]
},
{
"value": "110003",
"name": " ",
"index": "0|11|1100|110003",
"children": [ ]
},
{
"value": "110004",
"name": " ",
"index": "0|11|1100|110004",
"children": [ ]
},
{
"value": "110005",
"name": " ",
"index": "0|11|1100|110005",
"children": [ ]
},
{
"value": "110006",
"name": " ",
"index": "0|11|1100|110006",
"children": [ ]
},
{
"value": "110007",
"name": " ",
"index": "0|11|1100|110007",
"children": [ ]
}
]
},
{
"value": "1101",
"name": " ",
"index": "0|11|1101",
"children": [
{
"value": "110100",
"name": " ",
"index": "0|11|1101|110100",
"children": [ ]
},
{
"value": "110101",
"name": " ",
"index": "0|11|1101|110101",
"children": [ ]
},
{
"value": "110102",
"name": " ",
"index": "0|11|1101|110102",
"children": [ ]
},
{
"value": "110103",
"name": " ",
"index": "0|11|1101|110103",
"children": [ ]
},
{
"value": "110104",
"name": " ",
"index": "0|11|1101|110104",
"children": [ ]
}
]
},
{
"value": "1102",
"name": " ",
"index": "0|11|1102",
"children": [
{
"value": "110200",
"name": " ",
"index": "0|11|1102|110200",
"children": [ ]
},
{
"value": "110201",
"name": " ",
"index": "0|11|1102|110201",
"children": [ ]
},
{
"value": "110202",
"name": " ",
"index": "0|11|1102|110202",
"children": [ ]
},
{
"value": "110203",
"name": " ",
"index": "0|11|1102|110203",
"children": [ ]
},
{
"value": "110204",
"name": " ",
"index": "0|11|1102|110204",
"children": [ ]
}
]
}
]
}
]
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.