2012-01-08 6 views
6

के साथ लिनक्स के प्रकार के समान काम करता है, मैं पाइथन पर एक बैश स्क्रिप्ट पोर्ट कर रहा हूं। स्क्रिप्ट LC_ALL=C सेट करता है और लोकेल-विशिष्ट सॉर्ट ऑर्डर (http://stackoverflow.com/questions/28881/why-doesnt-sort-sort-the-same-on-every-machine) के बजाय मूल बाइट ऑर्डर सुनिश्चित करने के लिए लिनक्स सॉर्ट कमांड का उपयोग करता है।क्या पाइथन का प्रकार एलसी_ALL = सी

पायथन में, मैं पायथन की सूची sort() या sorted() फ़ंक्शंस (key= विकल्प के बिना) का उपयोग करना चाहता हूं। क्या मुझे हमेशा LC_ALL=C के साथ लिनक्स सॉर्ट के समान परिणाम मिलेंगे?

+2

पायथन का कौन सा संस्करण और किस चीज को हल किया जाना है? –

उत्तर

7

में एक "बाइट" प्रकार है छंटाई अगर आप list.sort() और sorted() करने के लिए cmp तर्क के रूप में locale.strcoll पारित आपकी अपेक्षा के अनुसार व्यवहार करना चाहिए:

import locale 
locale.setlocale(locale.LC_ALL, "C") 
yourList.sort(cmp=locale.strcoll) 
+0

सभी को धन्यवाद। मेरा डेटा सभी यूनिकोड हैं और मैंने कहा "बिना कुंजी = विकल्प" क्योंकि मैं इसे किसी अन्य उद्देश्य के लिए उपयोग करता हूं। यह समाधान बहुत अच्छा काम करता है। @nabucosound, आपका समाधान दिलचस्प है, लेकिन मेरे उद्देश्य के लिए PyICU स्थापित करना थोड़ा भारी है। एक बार फिर धन्यवाद। – tahoar

1

ध्यान में रखते हुए आप तुलनात्मक कार्य जोड़ सकते हैं, आप यह सुनिश्चित कर सकते हैं कि यह प्रकार LC_ALL = C के बराबर होगा। दस्तावेज़ों से, ऐसा लगता है कि सभी वर्ण 7 बिट हैं, फिर यह डिफ़ॉल्ट रूप से इस तरह से टाइप करता है, अन्यथा लोकेल विशिष्ट सॉर्टिंग का उपयोग करता है।

यदि आपके पास 8 बिट या यूनिकोड वर्ण हैं, तो लोकेल विशिष्ट सॉर्टिंग बहुत समझ में आता है।

1

पाइथन संस्करण में गैर-यूनिकोड तार 3 से कम वास्तव में बाइट हैं। सॉर्ट फ़ंक्शन और विधियां लोकेल को लागू करने के लिए कुछ भी नहीं करती हैं (स्थानीय स्तर पर जागरूक सॉर्टिंग को स्पष्ट रूप से सुविधाजनक बनाने के लिए लोकेल मॉड्यूल फ़ंक्शन की आवश्यकता होती है)।

यूनिकोड तार और पायथन 3.x के सभी तार अब बाइट्स नहीं हैं। वहाँ पायथन 3.

1

मैं International Components for Unicode उपयोग किया गया है, के साथ साथ PyICU बाइंडिंग, सॉर्ट किए गए चीजों को सॉर्ट करने के लिए() और अपने स्वयं के लोकेल (मेरे मामले में कैटलन) का उपयोग करना। उदाहरण के लिए, नाम संपत्ति द्वारा उपयोगकर्ता प्रोफाइल की एक सूची का ऑर्डर करना:

collator = PyICU.Collator.createInstance(PyICU.Locale('ca_ES.UTF-8')) 
sorted(user_profiles, key=lambda x: x.name, cmp=collator.compare) 
संबंधित मुद्दे