#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() ]