Каков наиболее подходящий способ создания целочисленного индексированного списка или набора элементов массива json? - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь найти лучший подход для добавления и хранения отсортированных json элементов массива в списке или dict. Я не знаю, что лучше, проще и удобочитаемее для моего случая.

Я собрал минимальный воспроизводимый пример с комментариями того, чего я пытаюсь достичь:

#!/usr/bin/python3.4
import json

json_data = json.loads('{'
   '"data":['
      '{'
         '"#CLIENT":"AAA",'
         '"#HOST":"host1.aaa.local",'
         '"#GROUP1":"AAA-Group-1"'
      '},'
      '{'
         '"#CLIENT":"AAA",'
         '"#HOST":"host2.aaa.local",'
         '"#GROUP1":"AAA-Group-1",'
         '"#GROUP2":"AAA-Group-2"'
      '},'
      '{'
         '"#CLIENT":"BBB",'
         '"#HOST":"host1.bbb.local",'
         '"#GROUP1":"BBB-Group-1"'
      '},'
      '{'
         '"#CLIENT":"BBB",'
         '"#HOST":"host2.bbb.local",'
         '"#GROUP1":"BBB-Group-1",'
         '"#GROUP2":"BBB-Group-2",'
         '"#GROUP3":"BBB-Group-3"'
      '},'
      '{'
         '"#CLIENT":"CCC",'
         '"#HOST":"host1.ccc.local",'
         '"#GROUP1":"CCC-Group-1",'
         '"#GROUP2":"CCC-Group-2"'
      '}'
   ']'
'}')

# List/dict to store concatenated and sorted
# json elements by number of #GROUP<i> values
grouped_list = []

print('Processing JSON elements:')
print('')
for element in json_data['data']:
    print('Processing JSON element: ',element)
    i = 1
    print('Processing groups:')
    while i < 5:
        group = '#GROUP'+str(i)
        if group in element:
            print(group+' found in json element')
            #Here: append to integer-indexed list, dict or whatever
        else:
            break
    print('')

#for list in grouped_list:
    # Do something with concatenated json elements
    # 1st list should contain 'data' json array elements with only #GROUP1
    # 2nd list should contain 'data' json array elements with #GROUP1 and #GROUP2 present

Было бы здорово иметь список / dict, к которому я также могу получить доступ, например, grouped_list [2] или что-то подобное, чтобы получить более json элементов, которые имеют # GROUP1 и # GROUP2, а grouped_list [1], чтобы получить json элементов, которые есть только # GROUP1, et c.

1 Ответ

0 голосов
/ 24 февраля 2020

Вот один из способов сделать это, используя dict.

#!/usr/bin/python3.4
import json

json_data = json.loads(...)

# Dict to store concatenated and sorted
# json elements by number of #GROUP<i> values
grouped_dict = dict()

print('Processing JSON elements:')
print('')

for element in json_data['data']:
    i = len([ v for v in element if v.startswith('#GROUP')])
    if i not in grouped_dict:
        grouped_dict[i] = []
    grouped_dict[i].append(element)

# Show that it worked
for n in grouped_dict:
    print(str(n)+' Groups in element: ',grouped_dict.get(n))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...