[Pythhon] 중첩된 사전과 진열의 각 값을 반복적으로 처리할 때의 코드 샘플을 원합니다
코드 샘플
먼저 고급 함수를 만듭니다.
create_recursive_action
는 수신값의 판정함수와 이 판정함수가 적용될 때 진행되는 함수로 귀속적으로 처리하는 함수이다.def create_recursive_action(is_target: Callable[[any], bool], action: Callable[[any], any]) -> Callable[[Union[dict, list]], Union[dict, list]]:
def is_dict_or_list(obj: any) -> bool:
return isinstance(obj, dict) or isinstance(obj, list)
def inner(obj: Union[dict, list]) -> Union[
dict, list]:
if isinstance(obj, dict):
return {
k: action(v) if is_target(v) else inner(v) if is_dict_or_list(v) else v
for k, v in obj.items()
}
if isinstance(obj, list):
return [
action(v) if is_target(v) else inner(v) if is_dict_or_list(v) else v
for v in obj
]
return inner
그리고 lambda
를 통해 목표 함수를 만듭니다.다음은 주어진 사전을 반복적으로 스캔하고, 수치가 문자열이면 upper () 를 적용하는 예입니다.
recursive_upper_case = create_recursive_action(lambda obj: isinstance(obj, str), lambda obj: obj.upper())
recursive_upper_case({
'dict': {
'str': 'aaa',
'dict': {
'str': 'aaa',
'num': 1,
'bool': True
},
},
'list': [
'bbb',
{
'dict': {
'str': 'aaa',
'num': 1,
'bool': True
},
}
]
})
# {'dict': {'str': 'AAA', 'num': 1, 'bool': True, 'dict': {'str': 'AAA', 'num': 1, 'bool': True}}, 'list': ['BBB', {'dict': {'str': 'AAA', 'num': 1, 'bool': True}}]}
사용자가 입력한 태그 등을 삭제하는 것도 편리하다.from django.utils.html import strip_tags
recursive_strip_tags = create_recursive_action(lambda obj: isinstance(obj, str), lambda obj: strip_tags(obj))
recursive_strip_tags({
'payload': [
{ 'text': '<b>aaa</b>' }
{ 'text': '<b>bbb>' }
[
{ 'text': '<b>ccc</b>' }
{ 'text': '<b>ddd</b>' }
]
]
})
# { 'payload': [ { 'text': 'aaa', { 'text': 'bbb' }, [ { 'text': 'ccc' }, { 'text', 'ddd' }]}]}
Reference
이 문제에 관하여([Pythhon] 중첩된 사전과 진열의 각 값을 반복적으로 처리할 때의 코드 샘플을 원합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ryo_kawamata/articles/python_recursice_code텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)