问题:如何索引字典?
我在下面有一个字典:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
如何索引字典中的第一个条目?
colors[0]
KeyError
由于明显的原因将返回。
回答 0
在Python版本(包括Python 3.6)及更高版本中,字典是无序的。如果您不关心条目的顺序,并且仍然想通过索引访问键或值,则可以使用d.keys()[i]
和d.values()[i]
或d.items()[i]
。(请注意,这些方法创建了Python 2.x中所有键,值或项的列表。因此,如果一次又一次需要它们,请将列表存储在变量中以提高性能。)
如果您确实关心条目的顺序,那么可以从Python 2.7开始使用collections.OrderedDict
。或使用成对清单
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
如果您不需要通过密钥访问。(为什么您的数字是字符串?)
在Python 3.7中,常规字典是有序的,因此您不再需要使用它OrderedDict
(但您仍然可以使用-它基本上是相同的类型)。Python 3.6的CPython实现已经包含了这一更改,但是由于它不是语言规范的一部分,因此您不能在Python 3.6中依赖它。
回答 1
如果仍然有人在看这个问题,那么当前接受的答案现在已经过时了:
由于Python 3.7 *字典是顺序保留的,也就是说它们现在的行为与collections.OrderedDict
s完全相同。不幸的是,仍然没有专用的方法可以索引到字典的keys()
/values()
中,因此可以通过以下方法获取字典中的第一个键/值:
first_key = list(colors)[0]
first_val = list(colors.values())[0]
或者(避免将键视图实例化为列表):
def get_first_key(dictionary):
for key in dictionary:
return key
raise IndexError
first_key = get_first_key(colors)
first_val = colors[first_key]
如果您需要n
-th键,则类似
def get_nth_key(dictionary, n=0):
if n < 0:
n += len(dictionary)
for i, key in enumerate(dictionary.keys()):
if i == n:
return key
raise IndexError("dictionary index out of range")
(* CPython 3.6已经包含有序字典,但这只是实现细节。语言规范包括3.7以后的有序字典。)
回答 2
处理字典中的元素就像坐在驴上,享受旅程。
作为Python的规则,字典是无序的
如果有
dic = {1: "a", 2: "aa", 3: "aaa"}
现在假设如果我喜欢dic[10] = "b"
,那么它不会总是这样添加
dic = {1:"a",2:"aa",3:"aaa",10:"b"}
可能像
dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}
要么
dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}
要么
dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}
或任何此类组合。
所以经验法则是字典是无序的!
回答 3
如果需要有序字典,可以使用odict。
回答 4
实际上,我找到了一个新颖的解决方案,确实帮了我大忙,如果您特别关心列表或数据集中某个值的索引,则可以将dictionary的值设置为该Index !:
只是看:
list = ['a', 'b', 'c']
dictionary = {}
counter = 0
for i in list:
dictionary[i] = counter
counter += 1
print(dictionary) # dictionary = {'a':0, 'b':1, 'c':2}
现在,借助哈希图的强大功能,您可以在恒定时间内(也就是快得多)拉入条目的索引
回答 5
哦,那是一个艰难的过程。基本上,这里的每个项目都有两个值。然后,您尝试使用数字作为键来呼叫他们。不幸的是,您的值之一已经设置为键!
试试这个:
colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}
现在,您可以按数字调用键,就像它们像列表一样被索引。您还可以通过颜色和数字在列表中的位置进行引用。
例如,
colors[1][0]
// returns 'blue'
colors[3][1]
// returns '8'
当然,您将不得不想出另一种方式来跟踪每种颜色的位置。也许您可以拥有另一本字典来存储每种颜色的键值。
colors_key = {‘蓝色’:1,’红色’:6,’yllow’:8}
然后,您也可以根据需要查找颜色键。
colors [colors_key [‘blue’]] [0]将返回’blue’
这样的事情。
然后,当您使用它时,可以使用数字值作为键进行字典操作,以便始终可以使用它们来查找颜色(如果需要)。
值= {5:[1,’蓝色’],6:[2,’红色’],8:[3,’黄色’]}
然后,(colors [colors_key [values [5] [1]]] [0])将返回’blue’。
或者,您可以使用列表列表。
祝好运!
回答 6
您不能,因为它dict
是无序的。您可以.popitem()
用来获取任意项,但这会将其从dict中删除。