用多个dicts 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

我正在寻找一种高效、更好的方法来做到这一点。如有任何建议或参考,我们将不胜感激。

您可以将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]

试试这个:

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]

试试这个:

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]

您可以使用列表理解来定义一个函数,以根据所有输入字典的值构建列表:

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)

如果没有使用字典的特定原因,我个人会使用一个类,并将条目存储在列表中。这里有一个例子:

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

最新更新