فرز Tuple الذي يحتوي على tuples
سؤال
لدي 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 ]
لا تنتمي إلى StackOverflow