Python—如何访问第一类数据

Python—如何访问第一类数据,python,python-3.x,Python,Python 3.x,在这本词典中,我可以使用NumberTextSet3[“万亿”]访问数字10000000000。 但是我如何访问字典中的最后一个单词,可能像:NumberTextSet3[-1]并让它返回“万亿”?字典没有排序,所以它没有“第一个”或“最后一个”条目。您可以按如下方式访问特定密钥: NumberTextSet3 = {"ten": 10, "hundred": 100, "thousand": 1000,

在这本词典中,我可以使用
NumberTextSet3[“万亿”]
访问数字
10000000000

但是我如何访问字典中的最后一个单词,可能像:
NumberTextSet3[-1]
并让它返回
“万亿”

字典没有排序,所以它没有“第一个”或“最后一个”条目。您可以按如下方式访问特定密钥:

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

如果要访问密钥列表,可以执行以下操作:

NumberTextSet3.get("trillion")
在我的电脑上有哪些回报:
['十亿','万亿','十','千','百万','一百']


正如你所见,这里没有“顺序”。

字典里没有最后一个词

要检查它,请尝试

NumberTextSet3.keys()
您将在不同的时间获得不同的排序结果

您可以稍微将数据结构修改为
[(“十”,10),(“百”,100),…]

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

比如说,

print NumberTextSet3
输出:

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

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

您也可以使用
OrderedDict

这可以工作,尽管由于字典没有排序,所以不能保证

ten
100
编辑:您可能希望使用元组列表(如下所示);在这种情况下,同样的技术也会起作用,因为
items()
以键/值对[tuple]的形式给出dict

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

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

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

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

Python字典没有排序保证

在实现方面,这源于这样一个事实,即字典是一个哈希映射,哈希映射的密钥顺序由哈希函数(假定为伪随机)确定

因此,虽然您可以访问字典中的第一个和最后一个项目(
NumberTextSet3.items()[0]
NumberTextSet3.items()[-1]
),但这些可能与您创建字典的顺序不符

但是,标准库提供了保留插入顺序的


请注意,我将字典文本更改为元组列表。使用字典文本不起作用,因为这将创建一个临时的无序字典,然后将其传递给
OrderedDict
,这将冻结(准随机)顺序。

那么我需要两个列表吗?一个代表“万亿”,一个代表“10000000000”?你可以看到我更新的答案。希望,这就是你想要的。所以这个问题是关于:获取字典中的最后一个值。如何访问第一类数据意味着什么?
TypeError:'KeysView'对象不支持索引
Ok不适合我在Python 2.7.10上进行索引,如果在索引之前构造列表,它应该总是有效的:
print list(numbertexset3.keys())[-1]
-这对你@KevinGuan有效吗?我忘了你在Python 2上了,对此我很抱歉。和
列表(NumberTextSet3.keys())[-1]
将在Python 3上工作:P@KevinGuan谢谢你的尝试:)我更新了答案。
trillion
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]
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']