MapleStory Finger Point

Development/Debugging

QSettings List of Dictionary

吳鍾振 2023. 1. 13. 21:48

QSettings는 Dictionary, Key 값과 Value 값으로 이루어져 있다.

그러다가 코드 작성 중에 Value 값을 List 형식으로 만들어야 할 작업이 있었다.

작성한 형식은 아래와 같다.

from PySide6.QtCore import QSettings


class Setting:
    settings = QSettings('Test', 'Hi')

    defaults = {'first': 'one', 'second': 'two', 'Hongdae': ['newjeans', 'hype boy']}

    @classmethod
    def get(cls, key):
        return cls.settings.value(
            key,
            cls.defaults[key],
            type(cls.defaults[key])
        )

QSettings의 get 함수를 사용하여 모든 Value 값을 추출하여 List 형식으로 만들려고 했었는데 값이 안나온다..
Value가 List 형식이 아닐 때 get 함수를 사용하면 잘 출력되는데, List 형식이면 아래처럼 나온다.

print(Setting.get('first'))
print(Setting.get('second'))
print(Setting.get('Hongdae'))

# Result:
# one
# two
# []

혹시나 직접 접근하여 값을 추출해 보니 잘 출력되었다.

print(Setting.get('Hongdae'))
print(Setting.defaults.get('Hongdae'))

# Result:
# []
# ['newjeans', 'hype boy']

이제 모든 Value 값들을 합쳐볼건데, 합치면 중첩 리스트 형태가 섞인다.

data = [value for value in Setting.defaults.values() if type(value) is not list]
list_data = [value for value in Setting.defaults.values() if type(value) is list]
data.extend(list_data)
print(data)

# Result:
# ['one', 'two', ['newjeans', 'hype boy']]

그래서 itertools 라이브러리를 사용하여 이중 중첩 리스트를 풀어줄 것이다.

import itertools
...
data = [value for value in Setting.defaults.values() if type(value) is not list]
list_data = [value for value in Setting.defaults.values() if type(value) is list]
list_data = list(itertools.chain(*list_data))
data.extend(list_data)
print(data)

# Result:
# ['one', 'two', 'newjeans', 'hype boy']

짜잔

반응형