Если a mydict
не пусто, я получаю доступ к произвольному элементу как:
mydict[mydict.keys()[0]]
Есть ли лучший способ сделать это?
python
dictionary
Стан
источник
источник
list(mydict.keys())[0]
.Ответы:
На Python 3, неразрушающе и итеративно:
На Python 2, неразрушающе и итеративно:
Если вы хотите, чтобы он работал как в Python 2, так и в 3, вы можете использовать
six
пакет:хотя на данный момент это довольно загадочно, и я бы предпочел ваш код.
Если вы хотите удалить какой-либо элемент, выполните:
Обратите внимание, что «first» может быть не подходящим термином, потому что
dict
это не упорядоченный тип в Python <3.6. Python 3.6+dicts
заказаны.источник
dict.iterkeys().next()
?dict.values().__iter__().__next__()
:)key, value = dict(d).popitem()
Если вам нужно получить доступ только к одному элементу (будучи первым случайно, поскольку диктовки не гарантируют порядок), вы можете просто сделать это в Python 2 :
Обратите внимание, что (насколько мне известно) Python не гарантирует, что 2 последовательных вызова любого из этих методов вернут список с одинаковым порядком. Это не поддерживается с Python3.
в Python 3 :
источник
list(my_dict.keys())[0]
list(my_dict.keys())[0]
не ленивый?В python3, кстати:
вернуть значение в типе: dict_keys (), мы получим ошибку, когда получим 1-й член ключей dict следующим образом:
Наконец, я конвертирую dict.keys () в list @ 1st и получаю 1-го члена методом сращивания списка:
источник
list(dict.values())[0]
.получить ключ
чтобы получить значение
чтобы получить оба
Первые два Python 2 и 3. Последние два ленивы в Python 3, но не в Python 2.
источник
Как уже упоминалось, «первого элемента» не существует, поскольку словари не имеют гарантированного порядка (они реализованы в виде хеш-таблиц). Если вы хотите, например, значение, соответствующее наименьшему ключу,
thedict[min(thedict)]
будет делать это. Если вас волнует порядок, в котором ключи были вставлены, то есть «первым» вы подразумеваете «вставленный раньше», то в Python 3.1 вы можете использовать collection.OrderedDict , который также будет в готовящемся Python 2.7; для более старых версий Python загрузите, установите и используйте упорядоченный обратный порт dict (2.4 и более поздние версии), который вы можете найти здесь .Python 3.7 Теперь дикты упорядочены по вставке.
источник
Как насчет этого. Здесь еще не упоминается.
пи 2 и 3
источник
dict.values()
возвращает представление, поэтому должно быть O (1).list(a)
возвращает новый список, поэтому будет O (n).Не обращая внимания на вопросы, связанные с порядком выбора, это может быть лучше:
Таким образом мы избегаем поиска элементов и генерируем список ключей, которые мы не используем.
python3
источник
next(iter(dict.values()))
получить тот же результат без создания списка.В python3
источник
Вы всегда можете сделать:
Это даст вам последовательно отсортированный (относительно встроенного .hash (), я думаю) набор ключей, которые вы можете обрабатывать, если сортировка имеет какое-то значение для вас. Это означает, что, например, числовые типы сортируются последовательно, даже если вы расширяете словарь.
ПРИМЕР
Обратите внимание, что словарь сортируется при печати. Но набор ключей по сути является хэш-картой!
источник
Для Python 2 и 3:
источник
Is there any better way to do this?
вкратце.источник
Нет внешних библиотек, работает на Python 2.7 и 3.x:
Для ключа aribtrary просто не указывайте .values ()
источник
Создание подклассов
dict
- один из методов, хотя и не эффективный. Здесь, если вы предоставите целое число, оно вернетсяd[list(d)[n]]
, иначе получите доступ к словарю, как и ожидалось:источник