Jor*_*ter 12 python dictionary
在python中,如果我执行以下操作:
>>> list = [ 3, 2, 1]
>>> sorted_list = k.sort()
Run Code Online (Sandbox Code Playgroud)
然后sorted_list是None和list排序:
>>> sorted_list = k.sort()
>>> print list, sorted_list
[1, 2, 3] None
Run Code Online (Sandbox Code Playgroud)
但是,如果我执行以下操作:
>>> list = [ 3, 2, 1]
>>> sorted_list = sorted(list)
Run Code Online (Sandbox Code Playgroud)
然后list保持未分类并sorted_list包含已排序列表的副本:
>>> print list, sorted_list
[3, 2, 1] [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有update词典功能的等价物.
这样我可以做这样的事情:
def foo(a, b, extra={}):
bar = { 'first': a, 'second': b }
special_function(**updated(bar, extra))
normal_function(**bar)
Run Code Online (Sandbox Code Playgroud)
而不是必须做这样的事情:
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)
Run Code Online (Sandbox Code Playgroud)
[1]是的我知道我可以简单地替换这两行,extra.update(bar)但我们假设我想保留原来extra的函数.
我意识到我可以自己实现这个:
def updated(old_dict, extra={}):
new_dict = old_dict.copy()
new_dict.update(extra)
return new_dict
Run Code Online (Sandbox Code Playgroud)
或者以下非常难以理解的就地声明:
special_function(**(dict(bar.items()+extra.items())))
Run Code Online (Sandbox Code Playgroud)
但我希望有一些我已经可以使用的东西.
Sve*_*ach 17
你可以简单地使用内置的dict():
updated_dict = dict(old_dict, **extra_dict)
Run Code Online (Sandbox Code Playgroud)
如果你需要非字符串键,你可以使用这样的函数:(它不像你的"就地"表达式那样丑陋+它适用于任意数量的字典)
from itertools import chain # ? credits go to Niklas B.
def updated(*dicts):
return dict(chain(*map(dict.items, dicts)))
updated({42: 'the answer'}, {1337: 'elite'}) # {42: 'the answer', 1337: 'elite'}
Run Code Online (Sandbox Code Playgroud)
否则斯文的建议就好了.
编辑:如果您使用的是Python 2.7或更高版本,您还可以使用字典理解,正如Sven在评论中所建议的那样:
def updated(*dicts):
return {k: v for d in dicts for k, v in d.items()}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |