Ответ 1
Если вам нужен только один ключ словаря, это, вероятно, самый короткий код Python 2 и 3:
my_dict = {'foo': 'bar'}
next(iter(my_dict)) # outputs 'foo'
Я пытаюсь заставить мою программу распечатать "banana"
из словаря. Каким будет самый простой способ сделать это?
Обратите внимание, что я не пытаюсь заставить мою программу распечатать значение, связанное с "banana"
, а скорее распечатать "banana"
с циклом for, поэтому, когда я его запустил, каждый текст также будет напечатан.
Это мой словарь:
prices = {
"banana" : 4,
"apple" : 2,
"orange" : 1.5,
"pear" : 3
}
Если вам нужен только один ключ словаря, это, вероятно, самый короткий код Python 2 и 3:
my_dict = {'foo': 'bar'}
next(iter(my_dict)) # outputs 'foo'
Словарь не индексируется, но он каким-то образом упорядочен. Следующее предоставит вам первый существующий ключ:
list(my_dict.keys())[0]
Если вы говорите о регулярном dict
, то "первый ключ" ничего не значит. Ключи не упорядочены так, как вы можете зависеть. Если вы итерацию над dict
вы, вероятно, не получите "banana"
, как первое, что вы видите.
Если вам нужно держать все в порядке, то вы должны использовать OrderedDict
а не просто словарь.
import collections
prices = collections.OrderedDict([
("banana", 4),
("apple", 2),
("orange", 1.5),
("pear", 3),
])
Если вы хотите увидеть все ключи по порядку, вы можете сделать это, перебирая их
for k in prices:
print(k)
Вы можете, в качестве альтернативы, поместить все ключи в список, а затем работать с этим
ks = list(prices)
print(ks[0]) # will print "banana"
Более быстрый способ получить первый элемент без создания списка - вызвать next
элемент в итераторе. Это не обобщает при попытке получить nth
элемент, хотя
>>> next(iter(prices))
'banana'
Для Python 3 ниже исключены накладные расходы на преобразование списка:
first = next(iter(prices.values()))
Тип dict
является неупорядоченным отображением, поэтому нет такой вещи, как "первый" элемент.
То, что вы хотите, возможно, collections.OrderedDict
.
Ну как просто, ответ по мне будет
first = list(prices)[0]
Преобразование словаря в список выведет ключи, и мы выберем первый ключ из списка.
Так что я нашел эту страницу, пытаясь оптимизировать что-то, чтобы взять единственный ключ в словаре известной длины 1 и вернуть только ключ. Процесс ниже был самым быстрым для всех словарей, которые я пробовал до размера 700.
Я попробовал 7 разных подходов и нашел, что этот был лучшим на моем Macbook 2014 с Python 3.6:
def first_5():
for key in biased_dict:
return key
Результатами их профилирования были:
2226460 / s with first_1
1905620 / s with first_2
1994654 / s with first_3
1777946 / s with first_4
3681252 / s with first_5
2829067 / s with first_6
2600622 / s with first_7
Все подходы, которые я попробовал, здесь:
def first_1():
return next(iter(biased_dict))
def first_2():
return list(biased_dict)[0]
def first_3():
return next(iter(biased_dict.keys()))
def first_4():
return list(biased_dict.keys())[0]
def first_5():
for key in biased_dict:
return key
def first_6():
for key in biased_dict.keys():
return key
def first_7():
for key, v in biased_dict.items():
return key
d.keys() [0], чтобы получить отдельный ключ.
Обновление: @AlejoBernardin, не знаю, почему вы сказали, что это не сработало. здесь я проверил, и это сработало. коллекции импорта
prices = collections.OrderedDict((
("banana", 4),
("apple", 2),
("orange", 1.5),
("pear", 3),
))
prices.keys()[0]
'банан'
Как отмечали многие другие, в словаре нет первого значения. Сортировка в них произвольная, и вы не можете рассчитывать на то, что сортировка будет одинаковой при каждом доступе к словарю. Однако, если вы хотите распечатать ключи, вам нужно несколько способов:
for key, value in prices.items():
print(key)
Этот метод использует назначение tuple для доступа к ключу и значению. Это удобно, если вам необходимо получить доступ как к ключу, так и по какой-либо причине.
for key in prices.keys():
print(key)
Это даст доступ только клавишам, как предполагает метод keys()
.
Используйте цикл for, который пробегает все ключи в prices
:
for key, value in prices.items():
print key
print "price: %s" %value
Убедитесь, что вы изменили prices.items()
на prices.iteritems()
, если используете Python 2.x
Это простой способ печати banana
. Это то, что вы ищете?
for key, value in prices.items() :
if value == 4:
print key
Конечно, это работает только в том случае, если в словаре нет других items
с value
4
. Если есть другие items
с value
4
, вы можете сделать это:
for key, value in prices.items() :
if value == 4 and key.startswith("banan"):
print key
Самый простой способ:
first_key = my_dict.keys()[0]
но иногда вам следует быть осторожнее и убедиться, что ваша сущность является ценным списком, поэтому:
first_key = list(my_dict.keys())[0]