Jak wyodrębnić pojedynczą parę klucz-wartość w zmiennych
Mam tylko jedną parę klucz-wartość w słowniku. Chcę przypisać klucz do jednej zmiennej i jest to wartość do innej zmiennej. Próbowałem z poniższymi sposobami, ale dostaję błąd dla tego samego.
>>> 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
Wiem, że możemy wyodrębnić klucz i wartość jeden po drugim, lub za pomocą pętli for I iteritems()
, ale czy nie ma prostego sposobu, aby przypisać oba w jednej instrukcji?
10 answers
Dodaj kolejny poziom, z krotką (tylko przecinkiem):
(k, v), = d.items()
Lub z listą:
[(k, v)] = d.items()
Lub wybierz pierwszy element:
k, v = d.items()[0]
Pierwsze dwa mają tę dodatkową zaletę, że rzucają wyjątek, jeśli twój słownik ma więcej niż jeden klucz, i oba działają na Pythonie 3, podczas gdy ten drugi musiałby być napisany jako k, v = next(iter(d.items()))
, aby zadziałał.
Demo:
>>> 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')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-22 11:13:58
items()
zwraca listę krotek TAK:
(k,v) = d.items()[0]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 13:19:33
>>> d = {"a":1}
>>> [(k, v)] = d.items()
>>> k
'a'
>>> v
1
Lub za pomocą next
, iter
:
>>> k, v = next(iter(d.items()))
>>> k
'a'
>>> v
1
>>>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 13:19:33
d = {"a": 1}
You can do
k, v = d.keys()[0], d.values()[0]
d.keys()
zwróci listę wszystkich kluczy i d.values()
zwróci listę wszystkich wartości, ponieważ masz jedną parę key: value w d
uzyskasz dostęp do pierwszego elementu listy kluczy i wartości
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-01 14:29:43
Jest to najlepsze rozwiązanie, jeśli masz wiele pozycji w słowniku, ponieważ w rzeczywistości nie tworzy on listy, ale daje tylko jedną parę klucz-wartość.
k, v = next(d.iteritems())
Oczywiście, jeśli masz więcej niż jedną pozycję w słowniku, nie ma sposobu, aby wiedzieć, który z nich wyjdziesz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 14:29:46
Masz listę. Aby uzyskać dostęp do elementów, musisz zindeksować listę.
(k,v) = d.items()[0]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 13:19:29
W Pythonie 3:
Krótka odpowiedź:
[(k, v)] = d.items()
Lub:
(k, v) = list(d.items())[0]
Lub:
(k, v), = d.items()
Długa odpowiedź:
d.items()
, zasadniczo (ale nie w rzeczywistości) daje listę z krotką, która ma 2 wartości, które będą wyglądać tak po wydrukowaniu:
dict_items([('a', 1)])
Możesz przekonwertować ją na aktualną listę, zawijając ją za pomocą list()
, co spowoduje taką wartość:
[('a', 1)]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-01 14:30:29
Użyj metody .popitem()
.
k, v = d.popitem()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-01 15:33:51
Jeśli chcesz tylko klucz słownikowy i nie dbasz o wartość, zauważ, że (key, ), = foo.items()
nie działa. Musisz przypisać tę wartość do zmiennej.
Więc potrzebujesz (key, _), = foo.items()
Ilustracja w Pythonie 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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-28 21:46:04
key = list(foo.keys())[0]
value = foo[key]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-22 18:52:15