如果我有一些字典:
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
对。
答案 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