我在字典中只有一个键值对。我想将键分配给一个变量 它对另一个变量有价值。我已尝试过以下方法,但我也遇到错误。
>>> d ={"a":1}
>>> d.items()
[('a', 1)]
>>> (k,v) = d.items()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
>>> (k, v) = list(d.items())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
我知道我们可以逐个提取键和值,或者通过for循环和iteritems()提取键,但是不是一种简单的方法,我们可以在单个语句中分配它们吗?
答案 0 :(得分:61)
添加另一个级别,带有元组(只是逗号):
(k, v), = d.items()
或列表:
[(k, v)] = d.items()
或挑出第一个元素:
k, v = d.items()[0]
前两个具有额外的优势,如果你的字典有多个键,它们会抛出异常,并且两者都可以在Python 3上运行,而后者必须拼写为k, v = next(iter(d.items()))
才能工作。
演示:
>>> d = {'foo': 'bar'}
>>> (k, v), = d.items()
>>> k, v
('foo', 'bar')
>>> [(k, v)] = d.items()
>>> k, v
('foo', 'bar')
>>> k, v = d.items()[0]
>>> k, v
('foo', 'bar')
>>> k, v = next(iter(d.items())) # Python 2 & 3 compatible
>>> k, v
('foo', 'bar')
答案 1 :(得分:5)
items()
返回一个元组列表,所以:
(k,v) = d.items()[0]
答案 2 :(得分:4)
>>> d = {"a":1}
>>> [(k, v)] = d.items()
>>> k
'a'
>>> v
1
或使用next
,iter
:
>>> k, v = next(iter(d.items()))
>>> k
'a'
>>> v
1
>>>
答案 3 :(得分:3)
d ={"a":1}
你可以做到
k, v = d.keys()[0], d.values()[0]
d.keys()实际上会返回所有键的列表,而d.values会返回所有值的列表,因为你有一个键:d,你将访问键列表中的第一个元素和值< / p>
答案 4 :(得分:2)
如果你在字典中有很多项目,这是最好的,因为它实际上并不创建一个列表,而只产生一个键值对。
k, v = next(d.iteritems())
当然,如果你在字典中有多个项目,就无法知道你会得到哪一个。
答案 5 :(得分:1)
你有一个清单。您必须索引列表才能访问元素。
(k,v) = d.items()[0]
答案 6 :(得分:1)
在Python 3中:
简短回答:
[(k, v)] = d.items()
或:
(k, v) = list(d.items())[0]
或:
(k, v), = d.items()
答案很长:
d.items(),基本上(但不是实际)给你一个带有元组的列表,它有2个值,打印时看起来像这样:
dict_items([('a', 1)])
您可以通过使用list()包装将其转换为实际列表,这将导致此值:
[('a', 1)]
答案 7 :(得分:1)
使用.popitem()
方法。
k, v = d.popitem()
答案 8 :(得分:0)
如果您只想要字典键,而不关心值,请注意(key, ), = foo.items()
不起作用。您确实需要将该值分配给变量。
因此您需要(key, _), = foo.items()
Python 3.7.2中的插图:
>>> foo = {'a': 1}
>>> (key, _), = foo.items()
>>> key
'a'
>>> (key, ), = foo.items()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 1)
答案 9 :(得分:0)
key = list(foo.keys())[0]
value = foo[key]