【问题标题】:Is there an Object spread syntax in python 2.7x like in Javascript?python 2.7x 中是否有类似 Javascript 的对象扩展语法?
【发布时间】:2023-07-27 03:08:01
【问题描述】:

如何将对象/dict(?) 属性传播到新对象/dict 中?

简单的 Javascript:

const obj = {x: '2', y: '1'}
const thing = {...obj, x: '1'}
// thing = {x: '1', y: 1}

Python:

regions = []
for doc in locations_addresses['documents']:
   regions.append(
        {
            **doc, # this will not work
            'lat': '1234',
            'lng': '1234',

        }
    )
return json.dumps({'regions': regions, 'offices': []})

【问题讨论】:

标签: javascript python object spread-syntax


【解决方案1】:

如果你有Python >=3.5,你可以在dict字面上使用关键字扩展:

>>> d = {'x': '2', 'y': '1'}
>>> {**d, 'x':1}
{'x': 1, 'y': '1'}

这有时被称为“喷溅”。

如果您使用的是 Python 2.7,那么没有等价物。这就是使用超过 7 年的东西的问题。您必须执行以下操作:

>>> d = {'x': '2', 'y': '1'}
>>> x = {'x':1}
>>> x.update(d)
>>> x
{'x': '2', 'y': '1'}

【讨论】:

  • 这是一个非常好的方法。但是,我在 Python 2.7.x 上收到了 SyntaxError
  • File "", line 366 **doc, ^ SyntaxError: invalid syntax I updated the question
  • @MatthewHarwood 是的,没有意识到您使用的是 Python 2.7。如果您想要与 dict-literals 一起使用的东西,那么您就是 SOL。
  • @MatiasCicero 是的,刚刚意识到 OP 在 2.7 上。这仅适用于 Python >3
  • @MohammedShareefC 这是非正式的,但我不认为这只是 Python。如果你用谷歌搜索“splat operator”,你会得到 Ruby 和 PHP 的成功
【解决方案2】:

您可以通过在原始的基础上创建一个dict,然后为新的/覆盖的键进行参数解包来实现这一点:

regions.append(dict(doc, **{'lat': '1234', 'lng': '1234'}))

【讨论】:

    最近更新 更多