如何找到字典中的第一个键?

我正在尝试让我的程序从字典中打印出"banana"。最简单的方法是什么?

这是我的字典:

prices = {
"banana" : 4,
"apple" : 2,
"orange" : 1.5,
"pear" : 3
}
662637 次浏览

dict类型是一个无序映射,因此没有“first”元素这样的东西。

你想要的可能是collections.OrderedDict

更新:从Python 3.7开始,插入顺序保持不变,所以这里不需要OrderedDict。你可以对一个正常的dict使用下面的方法

在3.7版更改:字典顺序保证为插入顺序。此行为是CPython 3.6版本的实现细节。

source


Python 3.6及更早版本*

如果你在谈论一个常规的dict,那么"first key"没有任何意义。这些键没有按照您可以依赖的任何方式进行排序。如果你遍历你的dict,你可能不会得到"banana"作为你看到的第一个东西。

如果你需要让事情井然有序,那么你必须使用OrderedDict而不仅仅是一个普通的字典。

import collections
prices  = collections.OrderedDict([
("banana", 4),
("apple", 2),
("orange", 1.5),
("pear", 3),
])

如果你想看到所有的键为了,你可以通过遍历它来做到这一点

for k in prices:
print(k)

你也可以,把所有的键放到一个列表中,然后使用它

keys = list(prices)
print(keys[0]) # will print "banana"

在不创建列表的情况下获取第一个元素的更快方法是在迭代器上调用next。但是,当试图获取nth元素时,这并不能很好地泛化

>>> next(iter(prices))
'banana'

CPython在3.6中保证了插入顺序。

正如许多人指出的那样,字典中没有第一个值。它们中的排序是任意的,不能指望每次访问字典时排序都是相同的。然而,如果你想打印这里的键,有几种方法:

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

该方法使用元组赋值来访问键和值。如果由于某种原因需要同时访问键和值,这很方便。

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

这将只提供对keys()方法所暗示的键的访问。

使用一个for循环遍历prices中的所有键:

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

如果使用Python 2.x,请确保将prices.items()更改为prices.iteritems()

在字典是有序的Python版本中,你可以这样做

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

对于字典的排序,你需要Python 3.7+,如果你愿意依赖CPython 3.6上字典的技术上实现细节的排序性质,则需要Python 3.6+。

对于早期的Python版本,没有“first key”,但这将为您提供“a key”,如果只有一个的话尤其有用。

字典没有索引,但在某种程度上是有序的。下面将为您提供第一个现有密钥:

list(my_dict.keys())[0]

D.keys()[0]获取单个密钥。

< p >更新:- @AlejoBernardin,我不知道你为什么说它不管用。这里我检查了一下,它工作了。 导入收藏< / p >
prices  = collections.OrderedDict((


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

“香蕉”

因此,当我试图优化一个东西,以获取已知长度为1的字典中的唯一键并仅返回该键时,我发现了这个页面。下面的过程是我尝试的所有700大小的字典中最快的。

我尝试了7种不同的方法,发现这个方法是最好的,在我2014年的Macbook上,使用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

很简单,根据我的答案将是

first = list(prices)[0]

将字典转换为列表将输出键,并从列表中选择第一个键。

如果你只想要字典中的第一个键,你应该使用很多人之前建议的方法

first = next(iter(prices))

然而,如果你想要第一个并保留其余的列表,你可以使用值解包操作符

first, *rest = prices

prices.values()替换prices同样适用于值,对于键和值你甚至可以使用解包赋值

>>> (product, price), *rest = prices.items()
>>> product
'banana'
>>> price
4

你可能会被诱使使用first, *_ = prices来获取第一个键,但我建议反对这种用法,除非字典非常短,因为它循环遍历所有键,并且为rest创建一个列表有一些开销。

注意:正如其他人所提到的,插入顺序从python 3.7(或技术上3.6)及以上保留,而早期的实现应该被视为未定义的顺序。

假设你想打印第一个键:

print(list(prices.keys())[0])

如果你想打印第一个键的值:

print(prices[list(prices.keys())[0]])

Python版本>= 3.7 #,其中字典被排序

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


# you can create a list of keys using list(prices.keys())


prices_keys_list = list(prices.keys())


# now you can access the first key of this list


print(prices_keys_list[0])   # remember 0 is the first index


# you can also do the same for values using list(prices.values())


prices_values_list = list(prices.values())


print(prices_values_list[0])