[英]Duck typing and foreign objects
我正在復制類似於這個問題的東西: python按類名切換?
我有一個for循環,迭代一組對象,並按類型將它們分類到幾個列表中的一個。
for obj in list_of_things:
if isinstance(obj, Class1):
class1list.append(obj)
if isinstance(obj, Class2):
class2list.append(obj)
等幾個其他類。 應用程序類似於ORM - 每個類的數據將被提取並寫入數據庫,每個類都有不同的數據要提取。 此外,必須在Class2的任何實例之前由ORM處理Class1的所有實例。
最后,Class1和Class2不是我的 - 它們是我正在使用的API的輸出,所以我無法像上一個問題中建議的那樣更改它們(比如,編寫一個轉儲序列化()的方法我需要的每個課程的數據)。 我向API請求了一些對象,它讓我充滿了各種類型的對象,我需要從中提取不同的數據。
有更多的pythonic方式嗎? 這種方法滿足了需要,但它傷害了我的眼睛,我想學習更好的方法。 我仍然是Python的新手。
根據您的具體情況,另一種方法可能會使用type
類型不可變的事實,因此可以用作字典鍵。
所以你可以這樣做:
from collections import defaultdict
list_of_things = [2, 3, "Some", "String"]
obj_map = defaultdict(list)
for obj in list_of_things:
obj_map[type(obj)].append(obj)
print(obj_map)
輸出:
defaultdict(<type 'list'>, {
<type 'int'>: [2, 3],
<type 'str'>: ['Some', 'String']
})
這里的想法是你不需要編寫一大堆if isinstance
測試,你只需要“分組”每個對象的類型。
您可以使用類名作為鍵來訪問字典的值:
print(obj_map[int]) # [2, 3]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.