سؤال

لدي tuple التالية ، التي تحتوي على tuples:

MY_TUPLE = (
    ('A','Apple'),
    ('C','Carrot'),
    ('B','Banana'),
)

أرغب في فرز هذا النقل بناءً على ثانيا القيمة الواردة في Tuples الداخلية (أي ، فرز Apple ، الجزر ، الموز بدلاً من A ، B ، C).

أي أفكار؟

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

المحلول

from operator import itemgetter

MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=itemgetter(1)))

أو بدون itemgetter:

MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=lambda item: item[1]))

نصائح أخرى

من فرز المصغر إلى

غالبًا ما يكون هناك مدمج يتناسب مع احتياجاتك ، مثل str.lower (). تحتوي وحدة المشغل على عدد من الوظائف المفيدة لهذا الغرض. على سبيل المثال ، يمكنك فرز tuples بناءً على العنصر الثاني باستخدام المشغل. itemgetter ():

>>> import operator 
>>> L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)]
>>> map(operator.itemgetter(0), L)
['c', 'd', 'a', 'b']
>>> map(operator.itemgetter(1), L)
[2, 1, 4, 3]
>>> sorted(L, key=operator.itemgetter(1))
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]

أتمنى أن يساعدك هذا.

sorted(my_tuple, key=lambda tup: tup[1])

بمعنى آخر ، عند مقارنة عنصرين من tuple التي تقوم بفرزها ، قم بالفرز بناءً على قيمة إرجاع الوظيفة التي تم تمريرها كمعلمة رئيسية.

لقد حققت نفس الشيء باستخدام هذا الرمز ، لكن اقتراحك رائع. شكرًا!

templist = [ (line[1], line) for line in MY_TUPLE ] 
templist.sort()
SORTED_MY_TUPLE = [ line[1] for line in templist ]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top