Добавление двух списков с несколькими dicts Python

#python #list #dictionary #append

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

Вопрос:

У меня есть пять словарей dic1, dict2, dict3, dict4, dict5 . Я пытаюсь добавить dict-keys к двум спискам list1, list2 .

 dict1 = {"brand": "Ford",
         "model": "Mustang",
         "year": 1964}

dict2 = {"brand": "Acura",
         "model": "Honda",
         "year": 1984}

dict3 = {"brand": "BMW",
         "model": "BMW",
         "year": 1974}

dict4 = {"brand": "Bentley",
         "model": "Volkswagen",
         "year": 1976}

dict5 = {"brand": "Cadillac",
         "model": "GM",
         "year": 1983}
  

Вывод

 list1 = ['Ford', 'Mustang', 1964, 'Acura', 'Honda', 1984, 'BMW', 'BMW', 1974, 'Bentley', 'Volkswagen', 1976]
list2 = ['Ford', 'Mustang', 1964, 'Acura', 'Honda', 1984, 'BMW', 'BMW', 1974, 'Cadillac', 'GM', 1983]
  

Первые три словаря должны быть добавлены как к спискам, так и к четвертому словарю dict4 к списку list1 и пятому dict5 к списку2.

До сих пор я делал это в этом подходе,

 def appendListsFromDict():
    #create Empty List
    list1, list2 = [], []

    #Create blank lists and append lists from each of the dictionaries
    #Appending for list1
    for key in dict1:
        list1.append(dict1[key])

    for key in dict2:
        list1.append(dict2[key])

    for key in dict3:
        list1.append(dict3[key])

    # dict4
    for key in dict4:
        list1.append(dict4[key])   



    #Appending for list2
    for key in dict1:
        list2.append(dict1[key])

    for key in dict2:
        list2.append(dict2[key])

    for key in dict3:
        list2.append(dict3[key])

    # dict5
    for key in dict5:
        list2.append(dict5[key])   

    return list1, list2
  

Я ищу эффективный и лучший подход к этому. Любые предложения или рекомендации будут высоко оценены.

Ответ №1:

Вы можете использовать list.extend для этой задачи

 dicts = [dict1, dict2, dict3]

list1, list2 = [], []
for d in dicts:
    list1.extend(d.values())
    list2.extend(d.values())

list1.extend(dict4.values())
list2.extend(dict5.values())

print(list1)
print(list2)
  

С принтами:

 ['Ford', 'Mustang', 1964, 'Acura', 'Honda', 1984, 'BMW', 'BMW', 1974, 'Bentley', 'Volkswagen', 1976]
['Ford', 'Mustang', 1964, 'Acura', 'Honda', 1984, 'BMW', 'BMW', 1974, 'Cadillac', 'GM', 1983]
  

Ответ №2:

Попробуйте это:

 list1=list(dict1.values()) list(dict2.values()) list(dict3.values()) list(dict4.values())

list2=list(dict1.values()) list(dict2.values()) list(dict3.values()) list(dict5.values())

>>> print(list1)
['Ford', 'Mustang', 1964, 'Acura', 'Honda', 1984, 'BMW', 'BMW', 1974, 'Bentley', 'Volkswagen', 1976]
>>> print(list2)
['Ford', 'Mustang', 1964, 'Acura', 'Honda', 1984, 'BMW', 'BMW', 1974, 'Cadillac', 'GM', 1983]
  

Ответ №3:

Попробуйте это:

 from itertools import chain

tuple_sum1 = (dict1, dict2, dict3)
x = lambda lis: list(chain(*lis))

list_1 = []

for dic in tuple_sum1:
    list_1.append([v for k, v in dic.items()])

main_list = x(list_1)

list_1 = main_list   list(dict4.values())
list_2 = main_list   list(dict5.values())

print(list_1)
print(list_2)
  

С принтами:

 ['Ford', 'Mustang', 1964, 'Acura', 'Honda', 1984, 'BMW', 'BMW', 1974,  'Bentley', 'Volkswagen', 1976]
['Ford', 'Mustang', 1964, 'Acura', 'Honda', 1984, 'BMW', 'BMW', 1974,'Cadillac', 'GM', 1983]
  

Ответ №4:

Вы можете определить функцию, используя понимание списка, для построения списка из значений всех входных словарей:

 def listify(*dicts):
    return [v for d in dicts for v in d.values()]

list1 = listify(dict1, dict2, dict3, dict4)
list2 = listify(dict1, dict2, dict3, dict5)
  

Ответ №5:

Если для этого нет конкретной причины использовать словари, я бы лично использовал класс и сохранил записи в списке. Вот пример:

 class Car:
    def __init__(self, _brand, _model, _year):
        self.brand = _brand
        self.model = _model
        self.year = _year

carList = []
#Create and store entries
carList.append(Car("Ford", "Mustang", 1994))
carList.append(Car("Acura", "Honda", 1984))
carList.append(Car("BMW", "BMW", 1974))

#Access properties of first two cars
for i in range(2):
    print(carList[i].brand,end=" ")
    print(carList[i].model,end=" ")
    print(carList[i].year)
  

Вывод

 Ford Mustang 1994
Acura Honda 1984
  

Ответ №6:

 list1 = [ v for d in (dict1,dict2,dict3,dict4) for v in d.values() ]
list2 = [ v for d in (dict1,dict2,dict3,dict5) for v in d.values() ]