Подтвердить что ты не робот

Как вы находите первый ключ в словаре?

Я пытаюсь заставить мою программу распечатать "banana" из словаря. Каким будет самый простой способ сделать это?

Обратите внимание, что я не пытаюсь заставить мою программу распечатать значение, связанное с "banana", а скорее распечатать "banana" с циклом for, поэтому, когда я его запустил, каждый текст также будет напечатан.

Это мой словарь:

prices = {
    "banana" : 4,
    "apple" : 2,
    "orange" : 1.5,
    "pear" : 3
}
4b9b3361

Ответ 1

Если вам нужен только один ключ словаря, это, вероятно, самый короткий код Python 2 и 3:

my_dict = {'foo': 'bar'}
next(iter(my_dict)) # outputs 'foo'

Ответ 2

Словарь не индексируется, но он каким-то образом упорядочен. Следующее предоставит вам первый существующий ключ:

list(my_dict.keys())[0]

Ответ 3

Если вы говорите о регулярном 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'

Ответ 4

Для Python 3 ниже исключены накладные расходы на преобразование списка:

first = next(iter(prices.values()))

Ответ 5

Тип dict является неупорядоченным отображением, поэтому нет такой вещи, как "первый" элемент.

То, что вы хотите, возможно, collections.OrderedDict.

Ответ 6

Ну как просто, ответ по мне будет

first = list(prices)[0]

Преобразование словаря в список выведет ключи, и мы выберем первый ключ из списка.

Ответ 7

Так что я нашел эту страницу, пытаясь оптимизировать что-то, чтобы взять единственный ключ в словаре известной длины 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

Ответ 8

d.keys() [0], чтобы получить отдельный ключ.

Обновление: @AlejoBernardin, не знаю, почему вы сказали, что это не сработало. здесь я проверил, и это сработало. коллекции импорта

prices  = collections.OrderedDict((

    ("banana", 4),
    ("apple", 2),
    ("orange", 1.5),
    ("pear", 3),
))
prices.keys()[0]

'банан'

Ответ 9

Как отмечали многие другие, в словаре нет первого значения. Сортировка в них произвольная, и вы не можете рассчитывать на то, что сортировка будет одинаковой при каждом доступе к словарю. Однако, если вы хотите распечатать ключи, вам нужно несколько способов:

for key, value in prices.items():
    print(key)

Этот метод использует назначение tuple для доступа к ключу и значению. Это удобно, если вам необходимо получить доступ как к ключу, так и по какой-либо причине.

for key in prices.keys():
    print(key)

Это даст доступ только клавишам, как предполагает метод keys().

Ответ 10

Используйте цикл for, который пробегает все ключи в prices:

for key, value in prices.items():
     print key
     print "price: %s" %value

Убедитесь, что вы изменили prices.items() на prices.iteritems(), если используете Python 2.x

Ответ 11

Это простой способ печати 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

Ответ 12

Самый простой способ:

first_key = my_dict.keys()[0]

но иногда вам следует быть осторожнее и убедиться, что ваша сущность является ценным списком, поэтому:

first_key = list(my_dict.keys())[0]