مشکل سورت(چینش) براساس حروف الفبای فارسی در پایتون
وقتی از تابع سورت پایتون(نسخه من 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
آب
ارک
ارگ
سیب
فیروز
لیف
مشنگ
هاون
پرواز
چابهار
چاه
ژاله
کوسه
گلابی
یاور
1 ضمیمه
نقل قول: مشکل سورت(چینش) براساس حروف الفبای فارسی در پایتون
سلام دوست عزیز.
کد رو تست کردم و دیدم که کاملا درست میفرمایید. نمیدونم اصل مشکل از کجاست. ولی یه راه حل موقت اینه که یک فانکشن برای این کار بنویسید و ازش برای کارهاتون استفاده کنید. توی مثالتون حرف x هم دیده میشه که خب، اگر یک لیست فارسی و انگلیسی باشه، قاعدتا اول حروف انگلیسی میاد. من یه مثال میزنم با اولویت حروف فارسی، یه مثال هم با اولویت حروف انگلیسی. اصلیترین دستوری که بکار میره اینه:
sorted(lst, key=lambda word: [alphabet.index(c) for c in word])
من دقیقا نمیدونم کد پایتون رو چطور باید قرار بدم اینجا. به همین دلیل، مثال کامل رو ضمیمه میکنم.
نقل قول: مشکل سورت(چینش) براساس حروف الفبای فارسی در پایتون
ممنونم آریون عزیز،
متاسفانه پایتون هنوز هم این مشکل رو برطرف نکرده. تنها روشی که در حال حاضر میتونه فارسی رو صحیح سورت کنه روش زیره:
import PyICU
collator = PyICU.Collator.createInstance(PyICU.Locale('fa_IR.UTF-8'))
lst = sorted(lst,key=collator.getSortKey)