簡體   English   中英

Python 列表/元組彈出返回本身?

[英]Python list/tuple pop return itself?

這可能是初級的,但是經過一些搜索后我找不到方法,但是pop()delremove()

我有以下 python (django) 代碼:

class PageSerializer(serializers.ModelSerializer):
    # ..
    class Meta:
        model = Page
        fields = ('id','user','created_at','title','url','og_image','desc','voters','is_public','updated_at', 'pagevote','pageidenticals',)
        read_only_fields = ('id','user','created_at','voters','is_public','updated_at','pagevote','pageidenticals')

請注意fieldsread_only_fields上的冗余。 兩者的唯一區別是title','url','og_image','desc

所以我只想減少read_only_fields中的代碼,就像這個偽代碼:

class PageSerializer(serializers.ModelSerializer):
    # ..
    class Meta:
        model = Page
        fields = ('id','user','created_at','title','url','og_image','desc','voters','is_public','updated_at', 'pagevote','pageidenticals',)
        read_only_fields = fields.chomps(['title','url','og_image','desc',])

由於它位於 class 上,因此不能像在def方法中那樣添加額外的pop() 那么,有沒有辦法呢?

似乎是set及其差異運算符的工作:

fields = ('id','user','created_at','title','url','og_image','desc','voters','is_public','updated_at', 'pagevote','pageidenticals',)
read_only_fields = tuple(set(fields)-{'title','url','og_image','desc'}))
print(read_only_fields)

結果:

('id', 'created_at', 'updated_at', 'pagevote', 'user', 'is_public', 'pageidenticals', 'voters')

請注意,訂單保存是 CPython 的一個實現細節,不能保證將來保持不變。 因此,如果您絕對需要訂單保證,以下替代方案可能更合適

tuple(x for x in fields if x not in {...})

Python set提供了一個 function symmetric_difference ,它基本上返回給定集合中存在的所有項目,除了它們的交集中的項目。

嘗試這個:

fields = ('id','user','created_at','title','url','og_image','desc','voters','is_public','updated_at', 'pagevote','pageidenticals',)

read_only_fields = ('id','user','created_at','voters','is_public','updated_at','pagevote','pageidenticals')

final_output = set(fields).symmetric_difference(set(read_only_fields))

print(final_output)

OUTPUT:

{'og_image', 'url', 'desc', 'title'}

暫無
暫無

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

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