将列表元素地址存储到字典

时间:2015-06-17 16:33:13

标签: python list dictionary

我有2个数据结构 -

  • list,和
  • 字典。

List包含一堆密钥。字典具有相同的键。至于每个键的值,我想在列表中存储相应元素的地址。这将实现什么:对于密钥,如果密钥存在与否,我会查找字典。如果key存在,则在列表中获取该元素的地址,然后获取/弹出/追加该元素。

我的问题:

我在字典中存储的内容是每个键的value,我可以使用它来查看列表中的特定元素?密钥的索引将在列表中更改。例如,我可以弹出一个元素并将其插入到最后。这样就可以使字典中所有键的索引发生变化。因此,存储绝对索引不是我想要的。

列表示例,对其的一些操作以及结果列表。 L = [' 1',' 2',' 3']

Add '4' to list:             L = ['1', '2', '3', '4']
Pop the last unused element: L = ['2', '3', '4']
Use the element '2':         L = ['3', '4', '2']
Pop the last unused element: L = ['4', '2']
Add '1' to the list:         L = ['4', '2', '1']
Add '5' to the list:         L = ['4', '2', '1', '5']
Use '2' from the list:       L = ['4', '1', '5', '2']

如您所见,元素的位置根据执行的操作而变化。如果我已经存储了元素的地址,使用字典将有助于避免搜索列表。

3 个答案:

答案 0 :(得分:1)

l = ['A', 'B', 'C']
d = {'A': {'value': 'a', 'index': 0},
     'B': {'value': 'b', 'index': 1},
     'C': {'value': 'c', 'index': 2}}
l[d['B']['index']]
'B' # result!

编辑(请参阅下面的评论)

要创建或更新,请致电:

from collections import defaultdict as DefaultDict

def index_lookup(elements):
    result = DefaultDict(list)
    for index, key in enumerate(elements):
        result[key].append(index)
    return result

>>> l = ['e', 'l', 'e', 'm', 'e', 'n', 't', 's']
>>> index_lookup(l)
defaultdict(<type 'list'>, {'e': [0, 2, 4], 'm': [3], 'l': [1], 'n': [5], 's': [7], 't': [6]})
>>> l.pop(2)
'e'
>>> index_lookup(l)
defaultdict(<type 'list'>, {'e': [0, 3], 'm': [2], 'l': [1], 'n': [4], 's': [6], 't': [5]})

答案 1 :(得分:0)

  

列表元素的索引。

您可以将list元素的索引存储在字典中,然后使用list[index]来获取该元素。

示例代码 -

lst = [5,4,3,2,1]
dict = {}
for idx, val in enumerate(lst):
    dict[val] = idx
print(dict)
>> {5:0 ,4:1 ,3:2 ,2:3 ,1:4}

检索代码,假设n是要检索的数字 -

if n in dict:
    list[dict[n]]

答案 2 :(得分:0)

显然,这是不可能的。为了实现这一点,我需要创建类对象并存储上一个和下一个元素的ID,就像我们在链表中那样。