В python 3.5+ есть более простой способ получить мелкую копию с помощью оператора ** распаковки. Определено Pep 448 .
>>>dict1 = {"key1": "value1", "key2": "value2"}
>>>dict2 = {**dict1}
>>>print(dict2)
{'key1': 'value1', 'key2': 'value2'}
>>>dict2["key2"] = "WHY?!"
>>>print(dict1)
{'key1': 'value1', 'key2': 'value2'}
>>>print(dict2)
{'key1': 'value1', 'key2': 'WHY?!'}
** распаковывает словарь в новый словарь, который затем присваивается dict2.
Мы также можем подтвердить, что каждый словарь имеет отдельный идентификатор.
>>>id(dict1)
178192816
>>>id(dict2)
178192600
Если требуется глубокая копия, то copy.deepcopy () все еще остается в пути.
Используя метод сортировки и лямбда-выражения, это действительно легко.
myList.Sort((a, b) => String.Compare(a.Name, b.Name))
Вышеупомянутые шоу в качестве примера, как отсортировать по свойству Name Вашего типа объекта, беря Имя, имеют строку типа.
Если Вы просто хотите Sort()
для работы затем необходимо будет реализовать IComparable
или IComparable<T>
в классе.
Если Вы не возражаете создавать новый список, можно использовать OrderBy
/ToList
Методы расширения LINQ. Если Вы хотите отсортировать существующий список с более простым синтаксисом, можно добавить несколько дополнительных методов, включив:
list.Sort(item => item.Name);
Например:
public static void Sort<TSource, TValue>(
this List<TSource> source,
Func<TSource, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
source.Sort((x, y) => comparer.Compare(selector(x), selector(y)));
}
public static void SortDescending<TSource, TValue>(
this List<TSource> source,
Func<TSource, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
source.Sort((x, y) => comparer.Compare(selector(y), selector(x)));
}
Необходимо настроить компаратор, который говорит Вид (), как расположить объекты.
Список выезда. Метод сортировки (IComparer) для примера того, как сделать это...