你如何找到字典中的第一把钥匙?

时间:2015-05-21 00:06:12

标签: python dictionary

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

请注意,我试图让我的程序打印出与"banana"相关联的值,而是打印出"banana"以及 循环,所以当我运行它时,每个键也会被打印出来。

这是我的字典:

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

12 个答案:

答案 0 :(得分:156)

如果您只想要字典中的一个键,这可能是最短的Python 2和3有效代码:

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

答案 1 :(得分:65)

字典未编入索引,但它以某种方式排序。以下内容将为您提供第一个现有密钥:

list(my_dict.keys())[0]

答案 2 :(得分:20)

如果你在谈论常规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'

答案 3 :(得分:10)

dict类型是无序映射,因此没有"第一个"元件。

你想要的可能是collections.OrderedDict

答案 4 :(得分:8)

对于下面的Python 3,消除了列表转换的开销:

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

答案 5 :(得分:8)

如果您只想从字典中获得第一个键,则应使用以前建议的键

first = next(iter(prices))

但是,如果您想要第一个并将其余的保留为列表,则可以使用值拆包运算符

first, *rest = prices

通过将prices替换为prices.values(),同样适用于值,对于键和值,您甚至可以使用拆包分配

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

注意:您可能会想使用first, *_ = prices来获取第一个密钥,但是除非字典非常实用,否则我会通常建议不要这样做很短,因为它会遍历所有键,并且为rest创建列表会有一些开销。

注意:如其他人所述,插入顺序保留在python 3.7(或技术上为3.6)及更高版本中,而较早的实现应视为未定义的顺序。

答案 6 :(得分:3)

那么简单,根据我的回答将会是

first = list(prices)[0]

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

答案 7 :(得分:1)

d.keys()[0]获取个人密钥。

更新: - @AlejoBernardin,我不确定你为什么说它没有用。在这里我检查了它的工作原理。 导入集合

prices  = collections.OrderedDict((

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

'香蕉'

  

答案 8 :(得分:0)

正如许多其他人所指出的那样,词典中没有第一个价值。它们中的排序是任意的,每次访问字典时,您都不能指望排序是相同的。但是,如果您想打印密钥,可以通过以下几种方式进行打印:

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

此方法使用元组分配来访问密钥和值。如果您出于某种原因需要同时访问密钥和值,这很方便。

keys()

这只会在Date myDate = new Date(yourLinuxTimestamp); Calendar c = Calendar.getInstance(); c.setTime(yourDate); int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); 方法暗示的情况下访问密钥。

答案 9 :(得分:0)

使用适用于prices中所有键的for循环:

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

如果您使用的是Python 2.x,请务必将prices.items()更改为prices.iteritems()

答案 10 :(得分:0)

因此,我在尝试优化某个东西以获取已知长度为1的字典中的唯一键并仅返回键时找到了此页面。对于我尝试过的最大尺寸为700的字典,以下过程是最快的。

我尝试了7种不同的方法,发现这是我使用Python 3.6的2014 Macbook上最好的方法:

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

答案 11 :(得分:-1)

最简单的方法是: first_key = my_dict.keys()[0] 但有时您应该更加小心,并确保您的实体是有价值的清单,因此:  first_key = list(my_dict.keys())[0]