簡體   English   中英

附加具有多個字典的兩個列表 Python

[英]Appending two lists with multiple 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到 list2。

到目前為止,我采用這種方法,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM