2012-10-07 10 views
13

में क्रमबद्ध करें। मैं अभी भी जिंजा 2 और फ्लास्क सीख रहा हूं और मुझे जिन्जा 2 में डिक्ट्सट का उपयोग करने में कठिनाई हो रही है।जिन्जा 2 लूप

तो मैं एक jinja2 टेम्पलेट में इस dict गुजर रही है:

{'PEDD United': {'id': 37828, 'rank': 12, 'totalpts': 307},'Fc Mbonabushia': {'id': 205633, 'rank': 6, 'totalpts': 356},'FC Slurp': {'id': 933573, 'rank': 11, 'totalpts': 312},'KFC_Overijse': {'id': 38861, 'rank': 5, 'totalpts': 362},'Fc Paris': {'id': 1538051, 'rank': 2, 'totalpts': 396}} 

क्या मैं चाहता हूँ एक तालिका कुंजी 'totalpts' का मान के अनुसार क्रमबद्ध है पैदा करते हैं। मैंने सभी प्रकार की चीजों की कोशिश की और यह "सॉर्टिंग" करते समय कुल मिलाकर खाते में नहीं लेता है।

यहाँ मेरी कोड में से एक है:

 <table class="table table-bordered"> 
     {% for team in league %} 
      <tr> 
       <td>{{team}}</td> 
       {% for data in league[team]|dictsort(league[team]['totalpts']) %} 
       <td>{{ league[team]['totalpts'] }}</td> 
       {% endfor %} 
      </tr> 
     {% endfor %} 
    </table> 

यह द्वारा इस मामले में कुछ भी सॉर्ट नहीं है ... बस किसी भी आदेश के बिना तालिका में मूल्य प्रिंट ...

किसी को भी मदद कर सकते हैं मै बाहर?

धन्यवाद

उत्तर

14

जिस तरह से आप यह कर रहे हैं काम नहीं करेगा, क्योंकि जैसे ही आप {% for team in league %} का उपयोग के रूप में आप पहले से ही कर रहे हैं बिना छेड़छाड़ किए गए निर्देश का उपयोग करके और कुंजी निकालने से, मूल्य जोड़ी।

मुझे लगता है कि |dictsort इस मामले में आपकी सहायता करने में सक्षम नहीं हो सकता है क्योंकि आप या तो कुंजी या मूल्य से क्रमबद्ध नहीं हो सकते हैं, लेकिन 'कुल' के लिए मूल्य (उप-निर्देश) मूल्य से।

इसके बजाय, आप से पहले इस शब्दकोश सॉर्ट चाहिए टेम्पलेट के लिए इसे पारित, निम्नलिखित तरीके से:

>>> from collections import OrderedDict 
>>> league={'PEDD United': {'id': 37828, 'rank': 12, 'totalpts': 307},'Fc Mbonabushia': {'id': 205633, 'rank': 6, 'totalpts': 356},'FC Slurp': {'id': 933573, 'rank': 11, 'totalpts': 312},'KFC_Overijse': {'id': 38861, 'rank': 5, 'totalpts': 362},'Fc Paris': {'id': 1538051, 'rank': 2, 'totalpts': 396}} 
>>> league = OrderedDict(sorted(league.items(), key= lambda x: x[1]['totalpts'], reverse=True)) 
>>> print league 
OrderedDict([('Fc Paris', {'id': 1538051, 'rank': 2, 'totalpts': 396}), ('KFC_Overijse', {'id': 38861, 'rank': 5, 'totalpts': 362}), ('Fc Mbonabushia', {'id': 205633, 'rank': 6, 'totalpts': 356}), ('FC Slurp', {'id': 933573, 'rank': 11, 'totalpts': 312}), ('PEDD United', {'id': 37828, 'rank': 12, 'totalpts': 307})]) 

dict क्रमबद्ध करने के लिए, हम इसे (कुंजी, मूल्य की tuples की एक सूची में तब्दील) .items() का उपयोग कर। मान लीजिए एक्स एक ऐसा टुपल है, एक्स [1] में 'कुल' कुंजी के साथ शब्दकोश शामिल है।

>>> league.items()[0] 
('Fc Paris', {'id': 1538051, 'rank': 2, 'totalpts': 396}) # = x 

तो अब हम x[1]['totalpts'] का उपयोग कर tuples को सॉर्ट, एक कम आदेश के लिए reverse=True का उपयोग कर।

एक dict ही हल नहीं किया जा सकता है, यह एक अव्यवस्थित डेटा प्रकार है - आप एक OrderedDict उपयोग कर सकते हैं, या आप बस tuples का उपयोग कर सकते हैं:

>>> sorted(league.items(), key= lambda x: x[1]['totalpts'], reverse=True) 
[('Fc Paris', {'id': 1538051, 'rank': 2, 'totalpts': 396}), ('KFC_Overijse', {'id': 38861, 'rank': 5, 'totalpts': 362}), ('Fc Mbonabushia', {'id': 205633, 'rank': 6, 'totalpts': 356}), ('FC Slurp', {'id': 933573, 'rank': 11, 'totalpts': 312}), ('PEDD United', {'id': 37828, 'rank': 12, 'totalpts': 307})] 
+0

आपकी मदद के लिए धन्यवाद, आपका जवाब बेकार ढंग से काम करता है और मुझे tuples सीखने में मदद करता है :) – Syl

3

आप sorted का उपयोग कर एक आदेश दिया सूची में सॉर्ट कर सकते हैं:

+0

काम नहीं करता। मुझे यह त्रुटि मिलती है। टाइप एरर: स्ट्रिंग इंडेक्स पूर्णांक होना चाहिए, स्ट्र – Syl

+0

@Syl ooops नहीं! अपडेट किया गया। –

+0

वास्तव में यह काम करता है। हालांकि, अनुज का जवाब बेहतर है क्योंकि मैं अभी भी अपनी विधि के साथ दूसरे नियम तक पहुंच सकता हूं। आपकी सहायताके लिए धन्यवाद! – Syl

संबंधित मुद्दे