# زبان های اسکریپتی > Python >  مشکل سورت(چینش) براساس حروف الفبای فارسی در پایتون

## apollo247

وقتی از تابع سورت پایتون(نسخه من 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

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

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

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

----------


## apollo247

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

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

----------

