سؤال

أحاول فرز الإملاء بناءً على مفتاحه وإرجاع مكرر إلى القيم من داخل طريقة مكرر تم تجاوزها في الفصل الدراسي.هل هناك طريقة أفضل وأكثر فعالية للقيام بذلك من إنشاء قائمة جديدة، وإدراجها في القائمة أثناء فرز المفاتيح؟

هل كانت مفيدة؟

المحلول

ماذا عن شيء مثل هذا:

def itersorted(d):
    for key in sorted(d):
        yield d[key]

نصائح أخرى

إلى حد بعيد، فإن النهج الأسهل، والأسرع بالتأكيد، هو شيء على غرار ما يلي:

def sorted_dict(d):
    keys = d.keys()
    keys.sort()
    for key in keys:
        yield d[key]

لا يمكنك الفرز دون جلب كافة المفاتيح.يعد جلب جميع المفاتيح إلى قائمة ثم فرز تلك القائمة هو الطريقة الأكثر فعالية للقيام بذلك؛يعد فرز القائمة سريعًا جدًا، كما أن جلب قائمة المفاتيح بهذه الطريقة يكون بأسرع ما يمكن.يمكنك بعد ذلك إما إنشاء قائمة جديدة من القيم أو الحصول على القيم كما هو الحال في المثال.ضع في اعتبارك أنه لا يمكنك تعديل الإملاء إذا كنت تقوم بالتكرار عليه (سيفشل التكرار التالي)، لذا إذا كنت تريد تعديل الإملاء قبل الانتهاء من نتيجةsorted_dict()، فاجعله يُرجع قائمة .

def sortedDict(dictobj):
    return (value for key, value in sorted(dictobj.iteritems()))

سيؤدي هذا إلى إنشاء قائمة متوسطة واحدة، بينما تقوم الطريقة 'sorted()' بإرجاع قائمة حقيقية.لكنها على الأقل واحدة فقط.

بافتراض أنك تريد ترتيب فرز افتراضي، يمكنك استخدامsorted(list) أو list.sort().إذا كنت تريد منطق الفرز الخاص بك، فإن قوائم Python تدعم القدرة على الفرز بناءً على دالة تقوم بتمريرها.على سبيل المثال، قد يكون ما يلي طريقة لفرز الأرقام من الأصغر إلى الأكبر (السلوك الافتراضي) باستخدام دالة.

def compareTwo(a, b):
  if a > b:
    return 1
  if a == b:
    return 0
  if a < b:
    return -1

List.Sort(compareTwo)
print a

يعد هذا الأسلوب من الناحية النظرية أنظف قليلاً من إنشاء قائمة جديدة يدويًا وإلحاق القيم الجديدة ويسمح لك بالتحكم في منطق الفرز.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top