花式字典拆包

时间:2017-04-25 17:55:00

标签: python dictionary iterable-unpacking

我有一本字典:

test = {'tuple':(1, 2, 3, 4), 'string':'foo', 'integer':5}

为了减少浪费的空间,我想将这些值解压缩到单个变量中。我知道可以解压缩字典的键:

>>> a, b, c = test
>>> print(a, b, c)
tuple string integer

但我想做的是解压缩字典值。有点像这样:

>>> tuple, string, integer = test
>>> print(tuple, string, integer)
(1, 2, 3, 4) string 5

这可能吗?如果没有,我认为如果你解压缩的变量对应于字典中的值,它应该将值解包到适当的变量中(如上所示)。

或者我这样做的唯一方法就是这样?:

>>> tuple, string, integer = test['tuple'], test['string'], test['integer']

4 个答案:

答案 0 :(得分:1)

假设您使用的是早于3.6的python版本,只需按键对值进行排序,然后按字母顺序解压缩...

integer, string, tup = [i[1] for i in sorted(test.items(), key=lambda x: x[0])]

然后,即使你添加更多的键,你只需要记住按字母顺序排列的顺序,虽然我看不出这种方法在使用dict方面有多实用

答案 1 :(得分:0)

假设dict上的键数是静态的,您可以先使用<body> <a-scene physics id="a"> <a-entity position="33 0 -33" rotation="0 180 0" id="camera" camera="userHeight: 1.6" kinematic-body universal-controls listener> </a-entity> <!-- walls --> <a-box color="#abc" static-body position="-35 0 0" width="0.001" height="6" depth="70"></a-box> <a-box color="#abc" static-body position="35 0 0" width="0.001" height="6" depth="70"></a-box> <!-- Lighting --> <a-light type="ambient" color="#bbb"></a-light> <a-light color="#ccc" position="0 30 0" distance="100" intensity="0.4" type="point"></a-light> <a-light color="#ccc" position="3 10 -10" distance="50" intensity="0.4" type="point"></a-light> </a-scene> </body> 检索它,然后分配给vars:

values()

https://docs.python.org/3.6/library/stdtypes.html#dict

中的更多信息

编辑:正如评论中所述,python并不能保证密钥的顺序,所以更好的解决方案是:

>>> tuple, string, integer = test.values()
>>> print(tuple, string, integer)
(1, 2, 3, 4) foo 5

此外,这解决了可变字典长度的问题。

答案 2 :(得分:0)

如果订单不是问题,您可以使用以下内容:

test = {'tuple':(1, 2, 3, 4), 'string':'foo', 'integer':5}

print([test[x] for x in test.keys()])

请注意,如果您希望它在您使用之前显示的格式,则会输出一个列表:

test = {'tuple':(1, 2, 3, 4), 'string':'foo', 'integer':5}

print(' '.join([str(test[x]) for x in test.keys()]))

当然,如果顺序很重要,你可以从test.keys()创建一个排序列表并迭代它,例如使用sorted(test.keys())

祝你好运!

编辑:

inty, stringy, tuply = [test[x] for x in sorted(test.keys())]

在这种情况下会产生所需的结果,但请注意,添加更多键可能会改变顺序!

答案 3 :(得分:0)

我所做的只是:

tuple, string, integer = [test[x] for x in ('tuple', 'string', 'integer')] 

它为我清理了足够的东西,并且接近我之后所做的事情。

仍然认为tuple, string, integer = **test(由@ user2357112建议)应该是一件事。对我来说很有意义。