我有一本字典:
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']
答案 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建议)应该是一件事。对我来说很有意义。