В python есть что-то вроде update, то есть обновлять, что нужно сортировать?

В python, если я сделаю следующее:

>>> list = [ 3, 2, 1]
>>> sorted_list = k.sort()

Тогда sorted_list is None и list отсортирован:

>>> sorted_list = k.sort()
>>> print list, sorted_list
[1, 2, 3] None

Однако, если я сделаю следующее:

>>> list = [ 3, 2, 1]
>>> sorted_list = sorted(list)

Тогда список останется несортированным, а sorted_list содержит копию отсортированного списка:

>>> print list, sorted_list
[3, 2, 1] [1, 2, 3]

Мне интересно, есть ли эквивалент для обновить функцию для словарей.

Таким образом, я мог бы сделать что-то вроде этого:

def foo(a, b, extra={}):
    bar = { 'first': a, 'second': b }
    special_function(**updated(bar, extra))
    normal_function(**bar)

вместо того, чтобы делать что-то вроде этого:

def foo(a, b, extra={}):
    bar = { 'first': a, 'second': b }
    special_bar = bar.copy()
    special_bar.update(extra) # [1]
    special_function(**special_bar)
    normal_function(**bar)

[1] Да, я понимаю, что могу просто заменить эти две строки на extra.update (bar) но предположим, что я хочу сохранить лишних , как это будет в дальнейшем в функции.

Я понимаю, что мог бы реализовать это сам следующим образом:

def updated(old_dict, extra={}):
    new_dict = old_dict.copy()
    new_dict.update(extra)
    return new_dict

Или следующий крайне нечитаемый на месте оператор:

    special_function(**(dict(bar.items()+extra.items())))

Но я надеялся, что есть что-то встроенное, что я уже мог бы использовать.

12
задан Jordan Reiter 28 February 2012 в 22:48
поделиться