Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In python is there something like updated that is to update what sorted is to sort?

In python if I do the following:

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

Then sorted_list is None and list is sorted:

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

However, if I do the following:

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

Then list remains unsorted and sorted_list contains a copy of the sorted list:

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

I am wondering if there is an equivalent for the update function for dictionaries.

That way I could do something like this:

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

rather than having to do something like this:

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] Yes I realize I could simply replace these two lines with extra.update(bar) but let's assume I want to retain extra as is for later on in the function.

I realize I could implement this myself thusly:

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

Or the following highly unreadable in-place statement:

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

But I was hoping there was something built in that I could already use.

like image 288
Jordan Reiter Avatar asked Feb 28 '12 16:02

Jordan Reiter


1 Answers

You can simply use the built-in dict():

updated_dict = dict(old_dict, **extra_dict)
like image 113
Sven Marnach Avatar answered Sep 20 '22 23:09

Sven Marnach