У меня есть список словарей, в которых я пытаюсь сделать значение ключа «Имя пользователя» в качестве ключа в новом словаре, и последующие пары ключ-значение в качестве значения словаря для ключа «Имя пользователя» в новый словарь.
Одна из проверок включает в себя возврат первого элемента из списка, если значение GECOS
является списком, в противном случае возвращается строковое значение ключа GECOS
.
Для первых двух словарей я не могу получить всю строку.
У меня есть данные ниже:
test_list = [
{
"Username": "root",
"UID": "0",
"GECOS": "root",
"Group List": [
""
]
},
{
"Username": "daemon",
"UID": "1",
"GECOS": "daemon",
"Group List": [
""
]
},
{
"Username": "hplip",
"UID": "118",
"GECOS": [
"HPLIP system user",
"",
"",
""
],
"Group List": [
""
]
},
{
"Username": "speech-dispatcher",
"UID": "111",
"GECOS": [
"Speech Dispatcher",
"",
"",
""
],
"Group List": [
"pulse",
"test"
]
}
]
и следующий код:
import json
new_dict = {}
for dict_item in test_list:
for key in dict_item:
new_dict[dict_item["Username"]] = {
'UID'.title().lower(): dict_item['UID'],
'GECOS'.title(): dict_item['GECOS'][0] if isinstance(dict_item[key], list) else dict_item['GECOS'],
'Group List'.title(): [] if all('' == s or s.isspace() for s in dict_item['Group List']) else dict_item['Group List']
}
print(json.dumps(new_dict, indent=4))
Вывод этого:
{
"root": {
"uid": "0",
"Gecos": "r",
"Group List": []
},
"daemon": {
"uid": "1",
"Gecos": "d",
"Group List": []
},
"hplip": {
"uid": "118",
"Gecos": "HPLIP system user",
"Group List": []
},
"speech-dispatcher": {
"uid": "111",
"Gecos": "Speech Dispatcher",
"Group List": [
"pulse",
"test"
]
}
}
И ожидаемый вывод:
{
"root": {
"uid": "0",
"Gecos": "root",
"Group List": []
},
"daemon": {
"uid": "1",
"Gecos": "daemon",
"Group List": []
},
"hplip": {
"uid": "118",
"Gecos": "HPLIP system user",
"Group List": []
},
"speech-dispatcher": {
"uid": "111",
"Gecos": "Speech Dispatcher",
"Group List": [
"pulse",
"test"
]
}
}