Bre*_*wer 15 python dictionary key
好的,所以这有点难以解释,但这里有:
我有一本字典,我正在添加内容.内容是带有IP地址(值)的哈希用户名(密钥).我通过在基数16上运行它们然后使用Collection.orderedDict将哈希放入一个顺序.所以,字典看起来有点像这样:
d = {'1234': '8.8.8.8', '2345':'0.0.0.0', '3213':'4.4.4.4', '4523':'1.1.1.1', '7654':'1.3.3.7', '9999':'127.0.0.1'}
Run Code Online (Sandbox Code Playgroud)
我需要的是一种机制,允许我选择其中一个键,并使键/值项目更高,更低一个.所以,例如,如果我选择2345,代码将返回键:值组合'1234:8.8.8.8'和'3213:4.4.4.4'
所以,像:
for i in d:
while i < len(d)
if i == '2345':
print i.nextItem
print i.previousItem
break()
Run Code Online (Sandbox Code Playgroud)
编辑: OP 现在声明他们正在使用 OrderedDicts,但用例仍然需要这种方法。
由于 dicts 不是有序的,因此您不能直接执行此操作。从您的示例中,您正在尝试像使用链接列表一样引用该项目。
一个快速的解决方案是提取键并对它们进行排序,然后迭代该列表:
keyList=sorted(d.keys())
for i,v in enumerate(keyList):
if v=='eeee':
print d[keyList[i+1]]
print d[keyList[i-1]]
Run Code Online (Sandbox Code Playgroud)
该keyList
握着你的项目的顺序,你必须回去吧,找出一个/上一个关键是要获得下一个/前值是什么。您还必须检查 i+1 是否大于列表长度以及 i-1 是否小于 0。
您可以类似地使用 OrderedDict,但我相信您仍然必须使用单独的列表执行上述操作,因为 OrderedDict 没有 next/prev 方法。
如OrderedDict
源代码中所示,如果您有一个密钥,并且您想在 O(1) 中找到下一个和上一个,您可以这样做。
>>> from collections import OrderedDict
>>> d = OrderedDict([('aaaa', 'a',), ('bbbb', 'b'), ('cccc', 'c'), ('dddd', 'd'), ('eeee', 'e'), ('ffff', 'f')])
>>> i = 'eeee'
>>> link_prev, link_next, key = d._OrderedDict__map['eeee']
>>> print 'nextKey: ', link_next[2], 'prevKey: ', link_prev[2]
nextKey: ffff prevKey: dddd
Run Code Online (Sandbox Code Playgroud)
这将按插入顺序为您提供下一个和上一个。如果您以随机顺序添加项目,则只需按排序顺序跟踪您的项目。
归档时间: |
|
查看次数: |
26661 次 |
最近记录: |