python複数リストのマージおよび複数django QuerySetのマージを実現する方法の例

2268 ワード

この例では、pythonが複数のlistをマージし、複数のdjango QuerySetをマージする方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
pythonまたはdjangoでいくつかのユーティリティアプリケーションを書くと、複数のlistを1つのlistにマージする場合があります.単純に技術的な観点から言えば、処理は難しくなく、考えられる方法はたくさんありますが、簡単で効率的な方法があるのは私が以前気づかなかったことだと思います.それはchain法を用いて複数のlistを統合することである.djangoのQuerySet.をマージするためにも使用できます.
1.pythonはchainで複数のlistをマージする
chainはCで実現されており、自然性能では比較的信頼性が高い.基本的な使い方を見てみましょう.

#coding:utf-8
from itertools import chain
a = [1,2,"aaa",{"name":"roy","age":100}]
b = [3,4]
c = [5,6]
#items = a + b + c
items = chain(a,b,c)
for item in items:
  print item


出力結果は次のとおりです.
1 2 aaa {'age': 100, 'name': 'roy'} 3 4 5 6
これにより、うまく合併できます.
2.Djangoでchainで複数のQuerySet.をマージする
それ自体がDjangoにおいて同じモデルの複数のQuerySetを統合する場合には、このような方式を採用することができる.

#coding:utf-8
from itertools import chain
from yihaomen.common.models import Article
articles1 = Article.objects.order_by("autoid").filter(autoid__lt = 16).values('autoid','title')
articles2 = Article.objects.filter(autoid = 30).values('autoid','title')
articles = articles1 | articles2 #          。   Model  ,       ,            
print articles1
print articles2
print articles


これで良い仕事ができますが、いくつかの限界があり、Djangoにとっても十分な場合が多く、1つのQuerySetに統合し、テンプレートエンジンに戻って処理します.
もちろんchainで実現することもできるし、chainで実現するほうが便利で、そんなに制限条件もないし、異なるMODELで検索したデータでも、1つのリストに簡単に統合できる.

#coding:utf-8
from itertools import chain
from yihaomen.common.models import Article, UserID
articles1 = Article.objects.order_by("autoid").filter(autoid__lt = 16).values('autoid','title')
users = UserID.objects.all()
items = chain(articles1, users)
for item in items:
  print item


これはより便利で実用的であり,統合が必要なリストを処理してある場所に転送する場合に便利である.
さらにPythonに関する内容に興味のある読者は、「Pythonリスト(list)操作テクニックまとめ」、「Pythonコード操作テクニックまとめ」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python関数使用テクニックまとめ」、「Python文字列操作テクニックまとめ」、「Python入門と進級経典チュートリアル」、「Pythonファイルとディレクトリ操作テクニックまとめ」などのトピックを参照してください.
ここではPythonプログラムの設計に役立つことを願っています.