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']
짜잔
반응형
'Development > Debugging' 카테고리의 다른 글
Invalid SOS parameters for sequential JPEG 에러 [Python OpenCV] (0) | 2023.04.26 |
---|---|
PyInstaller 에러 메시지 출력 (바로 꺼짐 이유 확인) (2) | 2022.07.05 |
파이썬 에러 메시지 쉽게 저장하기 (2) | 2021.01.25 |