簡體   English   中英

根據屬性組合兩個對象列表

[英]Combining two lists of objects based on an attribute

Python中列表或集合用法的每個示例似乎都包含整數的瑣碎情況,但是我有兩個對象列表,其中name屬性定義兩個對象實例是否“相同”(其他屬性可能具有不同的值)。

我可以創建一個列表,其中包含兩個列表中的所有項目,並用

tmpList = sorted(list1 + list2, key=attrgetter('name'))

但是我該怎么做,以便從第二個列表中選擇name屬性中具有相同值的列表項?

例如合並這兩個列表

list1 = [obj('Harry',18), obj('Mary',27), obj('Tim', 7)]
list2 = [obj('Harry', 22), obj('Mary', 27), obj('Frank', 40)]

會導致

list = [obj('Harry',22), obj('Mary', 27), obj('Tim', 7), obj('Frank', 40)]

(我將obj()用作具有兩個屬性的對象的簡寫形式。)

似乎我無法在大多數set和list函數中使用attrgetter()函數,就像在sorted()函數中一樣,因此我不知道該怎么做。 我懷疑我可以使用lambda函數,但我對函數式編程不太熟悉,因此似乎無法弄清楚。

天真的解決方案(首先選擇兩個列表中唯一的所有項目,然后將該列表與第二個列表的剩余內容組合在一起)似乎花費了很多時間,因此在Python中必須有一種更簡單的方法。

在我看來,您最好使用dict而不是列表,使用名稱作為鍵,然后將對象的其余部分用作值,這會更好。 然后,您可以簡單地dict1.update(dict2)

>>> dict1 = {"Harry": 18, "Mary": 27, "Tim": 7}
>>> dict2 = {"Harry": 22, "Mary": 27, "Frank": 40}
>>> dict1.update(dict2)
>>> dict1
{'Tim': 7, 'Harry': 22, 'Frank': 40, 'Mary': 27}

是。 簡單的方法是字典。

list1 = {"Harry": 18, "Mary": 27, "Tim": 7}
list2 = {"Harry": 22, "Mary": 27, "Frank": 40}

list1.update(list2)

列表現在為{'Harry':22, 'Mary': 27, 'Tim': 7, 'Frank': 40}

如果您的數據不只是數字,那就可以了。 您可以將任何類型的對象作為字典的值。

list1['Harry'] = (1,"weee",54.55)

您可以在對象中實現de __eq__屬性。 基於此,您可以將對象與==運算符進行比較。

暫無
暫無

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

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