web-dev-qa-db-ja.com

変数内の辞書の単一のキーと値のペアを抽出する方法

辞書にはキーと値のペアが1つしかありません。キーを1つの変数に割り当て、その値を別の変数に割り当てたい。私は以下の方法で試しましたが、同じエラーが発生しています。

>>> 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

キーと値を1つずつ、またはforループとiteritems()で抽出できることは知っていますが、両方を1つのステートメントで割り当てることができる簡単な方法はありませんか?

32
user966588

タプル(カンマのみ)で別のレベルを追加します。

_(k, v), = d.items()
_

またはリスト付き:

_[(k, v)] = d.items()
_

または、最初の要素を選択します。

_k, v = d.items()[0]
_

最初の2つには、辞書に複数のキーがある場合に例外をスローするという利点があり、両方とも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')
_
66
Martijn Pieters

items()はタプルのリストを返します:

(k,v) = d.items()[0]
5
Farhadix
>>> d = {"a":1}
>>> [(k, v)] = d.items()
>>> k
'a'
>>> v
1

または、nextiterを使用:

>>> k, v = next(iter(d.items()))
>>> k
'a'
>>> v
1
>>>
4
falsetru
    d ={"a":1}

できるよ

    k, v = d.keys()[0], d.values()[0]

dには単一のkey:valueペアがあるため、キーと値のリストの最初の要素にアクセスするため、d.keys()は実際にすべてのキーのリストを返し、d.valuesはすべての値のリストを返します。

3
its me

これは、辞書に多くのアイテムがある場合に最適です。実際にリストを作成するのではなく、キーと値のペアが1つだけになるためです。

k, v = next(d.iteritems())

もちろん、辞書に複数のアイテムがある場合、どのアイテムを取り出すかを知る方法はありません。

2
kindall

リストがあります。要素にアクセスするには、リストにインデックスを付ける必要があります。

(k,v) = d.items()[0]

In 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)]
1
Eduard
key = list(foo.keys())[0]
value = foo[key]

辞書キーだけが必要で、値を気にしない場合は、(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)
0
KevinG