[英]Python list/tuple pop return itself?
這可能是初級的,但是經過一些搜索后我找不到方法,但是pop()
, del
, remove()
。
我有以下 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')
請注意fields
和read_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.