Сортировка неоднородного списка объектов в Python

Пока поле является просматриваемым, Вам не нужно подтвердить поле. Пока Вы делаете некоторую проверку формы, чтобы быть уверенными, что это находится, по крайней мере, в допустимом формате для адреса электронной почты, позволяет пользователю управлять остальной частью проблем.

5
задан hekevintran 11 October 2009 в 02:55
поделиться

2 ответа

То, что вы почти наверняка ищете, - это использовать параметр key = для sorted (), который предоставляет функцию, которая возвращает произвольный ключ сортировки для каждого элемента. Эта функция может проверять тип своего аргумента и выполнять различные действия. Например:

import types

class obj(object):
    def __init__(self, arg):
        self.name = arg

def extract_name(obj):
    if type(obj) is types.DictType:
        return obj['name']
    else:
        return obj.__dict__['name']

d = { 'name': 'Jill'}    
print sorted([obj('Jack'), d], key=extract_name)

Дополнительную информацию можно найти в Python wiki

Предложение RichieHindle об использовании isinstance является хорошим. И пока я занимался этим, я подумал, что было бы неплохо поддерживать произвольные имена элементов вместо жесткого кодирования 'name':

def extract_elem_v2(elem_name):
    def key_extractor(obj):
        dct = obj if isinstance(obj, dict) else obj.__dict__
        return dct[elem_name]
    return key_extractor

Что вы можете использовать так:

print sorted(list_of_stuff, key=extract_elem_v2('name'))
8
ответ дан 13 December 2019 в 05:37
поделиться
sort_me.sort(key=attr_or_itemgetter('name'))

Where attr_or_itemgetter():

class attr_or_itemgetter(object):
    def __init__(self, name):
        self.name = name
    def __call__(self, obj):
        try: return getattr(obj, name)
        except AttributeError:
            return obj[name]

NOTE: It intentionally doesn't check for dictionary type, therefore attr_or_itemgetter('items') applied to a dictionary will return dict.items method.

2
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: