Python, сохраняет результаты в dict или аналогичном

#python #list #dictionary

#python #Список #словарь

Вопрос:

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

Я хочу сохранить usernames , и внутри этого я хочу сохранить list of objects . Например.

  Name: 'Sophy',
    Lst: [ object1, object2, object3... ],
 Name: 'Osprey',
    Lst: [ object1, object2, object3... ],

 ....
 

Дело в том, что я не уверен, что dict — это то, что я ищу. и если это так, я не уверен, как сделать так, чтобы dict выглядел так. Мне также нужно будет позже перебирать все объекты каждого пользователя.

Ответ №1:

это очень открытый, вы можете делать различные вещи, такие как

  • сделайте это словарем с ключом именем пользователя и значением любого вашего списка
       data = {'Sophy':[ object1, object2, object3... ],
              'Osprey':[ object1, object2, object3... ],
               ...
               }
     
  • список словарей
       data = [ {"Name": 'Sophy',  "Lst": [ object1, object2, object3... ]},
               {"Name": 'Osprey', "Lst": [ object1, object2, object3... ]},
              ...
              ]
     
  • класс
       class User:
          def __init__(self,name, lst):
              self.name=name
              self.lst=lst
    
      data = [User('Sophy', [ object1, object2, object3... ]),
              User('Osprey', [ object1, object2, object3... ]),
              ...
             ]
     

среди прочего…

Комментарии:

1. Класс был именно тем, что я искал, спасибо!

Ответ №2:

Список кортежей или словарей кажется правильным решением.

Словарь:

 data = [{'Sophy': [ object1, object2, object3... ]}, {'Osprey': [ object1, object2, object3... ]}, ....] 
 

Для итерации по нему:

 for dict in data:
    name = dict.keys()
    for obj in dict.values():
        print(obj) 
 

Кортеж:

 data = [('Sophy', [ object1, object2, object3... ]), ('Osprey', [ object1, object2, object3... ]), ....] 
 

Для итерации по нему:

 for i in data:
    name = i[0]
    for obj in i[1]:
        print(obj) 
 

Я думаю, что использование кортежей здесь имеет больше смысла.

Ответ №3:

Может быть, посмотрите на json формат. В основном вложенный словарь.

Комментарии:

1. JSON здесь неуместен, в OP ничего не упоминается о сериализации

2. Нет? JSON — это формат сериализации на основе текста. Здесь это просто не имеет значения, OP спрашивает, какие структуры данных использовать, а не какой формат сериализации

3. И все же. Использование json формата, о котором я уже говорил, — это хороший способ. Например, {"sophie" : {"lis" : [object1, object2, object3...]}, "osprey": {"lis" : [object1, object2, object3]}}

4. Я не думаю, что вы понимаете, JSON — это формат сериализации . Говорить, что здесь следует использовать формат JSON, является ошибкой категории. То, что вы показали, например, даже не является допустимым JSON, но это допустимый Python. JSON — это не «вложенный словарь», это текст

5. Это действительно в python? так что, другими словами, я был прав, это хороший способ сделать это.

Ответ №4:

Вам нужен словарь.

 >>> my_names = dict()
>>> my_names['sophy']=['object1', 'object2']
>>> my_names
{'sophy': ['object1', 'object2']}
 

Здесь ‘object1’ может быть вашим объектом вместо строки.
Для итерации вы можете сделать что-то вроде,

 >>> for key,value in my_names.items():
...   print(f"{key} : {value}")
... 
sophy : ['object1', 'object2']