Python - 如何访问第一类数据

时间:2015-10-01 06:39:27

标签: python python-3.x

NumberTextSet3 = {"ten": 10, 
                  "hundred": 100,
                  "thousand": 1000,
                  "million": 1000000,
                  "billion": 1000000000,
                  "trillion": 1000000000000}

在此词典中,我可以使用1000000000000访问号码NumberTextSet3["trillion"]。 但是我如何访问字典中的最后一个单词,可能是:NumberTextSet3[-1]并让它返回"trillion"

6 个答案:

答案 0 :(得分:1)

字典中没有最后一个字。

要检查它,请尝试

print NumberTextSet3

您将在不同的时间获得不同的有序结果。

您可以稍微修改数据结构为[("ten",10),("hundred",100),...]

现在,您可以将其与索引一起使用。

例如,

a=[("ten",10),("hundred",100)]

print a[0][0]
print a[1][1]

输出:

ten
100

您也可以使用OrderedDict

答案 1 :(得分:1)

我会像这样使用OrderedDict:

from collections import OrderedDict

NumberTextSet3 = OrderedDict([("ten", 10),
                              ("hundred", 100),
                              ("thousand", 1000),
                              ("million", 1000000),
                              ("billion", 1000000000),
                              ("trillion", 1000000000000)])
# On Python2 this will work:
print NumberTextSet3.keys()[-1]
# This is a little bit longer but will work in Python2 and Python3:
print list(NumberTextSet3.keys())[-1]

答案 2 :(得分:0)

字典不是有序的,所以它没有“第一个”或“最后一个”条目。您可以访问特定密钥,如下所示:

NumberTextSet3["trillion"]

或:

NumberTextSet3.get("trillion")

如果您想访问您可以执行的按键列表:

NumberTextSet3.keys()

返回我的电脑:['billion', 'trillion', 'ten', 'thousand', 'million', 'hundred']

如你所见 - 这里没有“订单”。

答案 3 :(得分:0)

这可以工作,但由于没有订购词典,因此无法保证。

NumberTextSet3.items()[-1][0]

编辑:你可能想要使用元组列表(下面);在这种情况下,相同的技术将起作用,因为items()给出了键/值对[元组]中的字典。

NumberTextSet3 = (("ten", 10), 
                  ("hundred", 100),
                  ("thousand", 1000),
                  ("million", 1000000),
                  ("billion", 1000000000),
                  ("trillion", 1000000000000))

答案 4 :(得分:0)

您需要提取所有条目,然后对它们进行排序:

import operator

NumberTextSet3 = {"ten": 10, 
                  "hundred": 100,
                  "thousand": 1000,
                  "million": 1000000,
                  "billion": 1000000000,
                  "trillion": 1000000000000}

values = sorted(NumberTextSet3.items(), key=operator.itemgetter(1))

print values[-1][0]

,并提供:

trillion

如果您想进行反向查找,则可以按如下方式创建逆映射,并使用:

InverseNumberTextSet3 = {v: k for k, v in NumberTextSet3.items()}
print InverseNumberTextSet3[1000000000000]

给予:

trillion

答案 5 :(得分:0)

Python词典没有订购保证。

实现方面,这源于这样一个事实:字典是一个哈希映射,而哈希映射的密钥排序由哈希函数决定(假设是伪随机的)。

因此,虽然您可以分别访问字典中的第一个 last 项目(NumberTextSet3.items()[0]NumberTextSet3.items()[-1]),但这些可能不会对应于您创建字典的顺序。

但是,标准库提供了collections.OrderedDict保留了广告订单,因此

from collections import OrderedDict

NumberTextSet3 = OrderedDict((
    ("ten", 10),
    ("hundred", 100),
    ("thousand", 1000),
    ("million", 1000000),
    ("billion", 1000000000),
    ("trillion", 1000000000000)
))

print(list(NumberTextSet3.keys())) 
=> ['ten', 'hundred', 'thousand', 'million', 'billion', 'trillion']
print(list(dict(NumberTextSet3).keys()))
=> ['million', 'hundred', 'ten', 'billion', 'thousand', 'trillion']

请注意我将字典文字更改为元组列表的事实。使用字典文字是行不通的,因为这会创建一个临时的,无序的字典,而不是将其传递给OrderedDict,这会冻结(准随机)顺序。