python3 재귀함수를 사용하여 이와 같이 구현해보려하는데 막혀서 질문드립니다!
조회수 251회
아래와 같이 netsted한 구조를 가진 형식인데
- 자기 자신의 부모 값을 가져야 합니다. (최상위 루트는 부모가 자기 자신이니 None입니다!)
- 맨 끝 노드까지 찾게된 후 부모 중 리스트인 부모가 있다면 다음 인덱스로 다시 끝까지 찾게 됩니다.
- 값이 리스트 일 카운트+1 이 되며(기본 0),
- 다음 n+1인덱스도 끝까지 찾아 가게 됩니다! 설명이 다소 부족한 점 이해 부탁드립니다 꾸벅.
example
{
"a": {
"a_a": [
{
"a_a_a": [
{
"a_a_a_a": {
"a_a_a_a_a": {
"value": "first value",
"check": true
}
}
},
{
"a_a_a_b": {
"a_a_a_b_a": {
"value": "second value",
"check": true
}
}
}
]
}
]
}
}
result ( 원하는 방향 )
[
{"id": 1, "field_id": "a | 0", "parent_id": None, "value": None, "check": False},
{"id": 2, "field_id": "a_a | 0", "parent_id": 1, "value": None, "check": False},
{"id": 3, "field_id": "a_a_a | 0", "parent_id": 2, "value": None, "check": False},
{"id": 4, "field_id": "a_a_a_a | 0", "parent_id": 3, "value": None, "check": False},
{"id": 5, "field_id": "a_a_a_a_a | 0", "parent_id": 4, "value": "first_value", "check": True},
{"id": 6, "field_id": "a_a_a | 1", "parent_id": 2, "value": None, "check": False},
{"id": 7, "field_id": "a_a_a_b | 0", "parent_id": 6, "value": None, "check": False},
{"id": 8, "field_id": "a_a_a_b_a | 0", "parent_id": 7, "value": "second value", "check": True},
]
시도한 방향
def recursive(request: dict):
id = uuid.uuid().hex
serialize = []
for k, v in request.items():
if isinstance(v, list):
for re_list in v:
recursive(re_list)
elif isinstance(v, dict):
recursive(v)
else:
serialize.extend(
id,
f"{request.get('field_id')} | cnt",
request.get("parent_id", None),
request.get("check", False)
)
return serialize
1 답변
-
request.items()
로 하셔야 k, v의 리스트를 반환해 줄 겁니다.dict
의get
메소드는 key를 이용해 value를 가져옵니다.id
,field_id
,parent_id
모두 key일때 값을 가져올 수 있습니다. 특히 id는 어디에 변수가 선언되어있는지 보이지 않습니다.- 만약
parent_id
값을 가져오고 싶으시다면def recursive(request: dict, parent_id: int)
의 형태로 받아오시는게 좋을 것 같습니다. serialize
변수를 확장할때extend
부분이 문제가 있는것 같습니다.serialize.append({"id":"", "field_id": ""})
의 형태로 append해주시면 좋을 것 같습니다.else
문에서는serialize
변수에 값을 추가해주지만,if
문과elif
문의 코드에서는 반환된 값을serialize
변수에 추가해주지 않고 있습니다. 해당 부분에 대해서도 확인해보시면 좋을 것 같습니다.
댓글 입력