在不知道其密钥名称的情况下解压缩字典

时间:2015-01-03 02:05:16

标签: python dictionary unpack

如果我有一些字典:

d = {'keyname': ['foo', 'bar']}

而且我不知道如何用两个变量解压缩这个dict的关键名称?

这不起作用:

k,v = d

我可以像这样迭代这个词:

for k, v in d.items():
    # k and v are now available

但我认为这不是" pythonic"足够的方式

如何在不使用for循环的情况下执行此操作?

"d"始终只能有一个key:val对。

3 个答案:

答案 0 :(得分:3)

您可以使用iterable unpacking:

>>> d = {'keyname': ['foo', 'bar']}
>>> [(k, v)] = d.items()
>>> k
'keyname'
>>> v
['foo', 'bar']
>>>

这适用于Python 2.x和Python 3.x。

但请注意,如果您使用的是Python 2.x,使用d.iteritems()代替d.items()会稍微高效一点:

>>> from timeit import timeit
>>> d = {'keyname': ['foo', 'bar']}
>>> timeit('[(k, v)] = d.items()', 'from __main__ import d')
0.786108849029695
>>> timeit('[(k, v)] = d.iteritems()', 'from __main__ import d')
0.6730112346680928
>>>

这是因为iteritems返回迭代器而items构建了不必要的列表。

答案 1 :(得分:2)

在Python 2.x 中 如果您的dictionary总是长度为1,那么这可能是一种可能的解决方案:

>>> d = {'keyname': ['foo', 'bar']}
>>> k, v = d.keys()[0], d.values()[0]
>>> k
'keyname'
>>> v
['foo', 'bar']

对于Python 2.x 3.x 使用.items()

>>> k, v = d.items()[0]
>>> k
'keyname'
>>> v
['foo', 'bar']

对于python 3.x

>>> d = {'keyname': ['foo', 'bar']}
>>> k, v = tuple(d.keys())[0], tuple(d.values())[0]
>>> k
'keyname'
>>> v
['foo', 'bar']

答案 2 :(得分:0)

d = {' keyname':[' foo',' bar']}

表示d.keys()中的k:     key = k

val = d[k]

print key, val