PDA

View Full Version : مشکل سورت(چینش) براساس حروف الفبای فارسی در پایتون



apollo247
پنج شنبه 16 اسفند 1397, 22:44 عصر
وقتی از تابع سورت پایتون(نسخه من 3.7.2) استفاده می کنیم سورت به درستی انجام نمیشه و برخی حروف الفبا در جای مناسب قرار نمیگیرن.
این حروف عبارتند از چ ک گ پ ژ که در چینش بعد از حرف "ه" و قبل از حرف "ی" قرار می گیرند.
هر چه جستجو کردم در جایی ندیدم که به این مشکل اشاره کرده باشند اما من هم روی ویندوز و هم لینکس امتحان کردم و نتیجه همین بود.


نمونه کد را هم می آورم خودتان تست کنید:


#testing farsi sort
lst = [
"x",
"ژاله",
"سیب",
"یاور",
"پرواز",
"مشنگ",
"گلابی",
"آب",
"چابهار",
"هاون",
"فیروز",
"کوسه",
"لیف",
"ارگ",
"ارک",
"چاه",
]

lst.sort()
print(lst)
with open("lst.txt", 'w', encoding="utf-8")as file:
for l in lst:
file.write(l+"\n")




که نتیجه به صورت زیر میشود:


x
آب
ارک
ارگ
سیب
فیروز
لیف
مشنگ
هاون
پرواز
چابهار
چاه
ژاله
کوسه
گلابی
یاور

Arioun
سه شنبه 28 اسفند 1397, 04:31 صبح
سلام دوست عزیز.
کد رو تست کردم و دیدم که کاملا درست می‌فرمایید. نمی‌دونم اصل مشکل از کجاست. ولی یه راه حل موقت اینه که یک فانکشن برای این کار بنویسید و ازش برای کارهاتون استفاده کنید. توی مثالتون حرف x هم دیده میشه که خب، اگر یک لیست فارسی و انگلیسی باشه، قاعدتا اول حروف انگلیسی میاد. من یه مثال میزنم با اولویت حروف فارسی، یه مثال هم با اولویت حروف انگلیسی. اصلی‌ترین دستوری که بکار میره اینه:


sorted(lst, key=lambda word: [alphabet.index(c) for c in word])


من دقیقا نمی‌دونم کد پایتون رو چطور باید قرار بدم اینجا. به همین دلیل، مثال کامل رو ضمیمه می‌کنم.

apollo247
دوشنبه 11 فروردین 1399, 23:17 عصر
ممنونم آریون عزیز،
متاسفانه پایتون هنوز هم این مشکل رو برطرف نکرده. تنها روشی که در حال حاضر میتونه فارسی رو صحیح سورت کنه روش زیره:

import PyICU
collator = PyICU.Collator.createInstance(PyICU.Locale('fa_IR. UTF-8'))
lst = sorted(lst,key=collator.getSortKey)