如何在按唯一键值排序的字典列表中对字典进行寻址



(使用Python 2.7)列表,例如:

L = [
    {'ID': 1, 'val': ['eggs']}, 
    {'ID': 2, 'val': ['bacon']}, 
    {'ID': 6, 'val': ['sausage']},
    {'ID': 9, 'val': ['spam']}
    ]

这就是我要的:

def getdict(list, dict_ID):
    for rec in list
        if rec['ID'] == dict_ID:
            return rec
print getdict(L, 6)

,但有没有一种方法可以直接寻址该字典,而不遍历列表直到找到它?

用例:读取记录文件(有序字典)。具有重复出现ID的记录中的不同键值必须与具有该ID首次出现的记录合并。

ID号可能出现在其他键值中,因此if rec['ID'] in list会产生假阳性。

在读取记录(并将它们添加到有序字典列表中)时,我维护一组唯一ID,并且只有在新读取的ID已经在那里时才调用getdict。但是,这仍然是很多次的迭代,我想知道是否有更好的方法。

用例:读取记录文件(有序字典)。不同的关键具有重复出现ID的记录中的值必须与记录该ID的第一次出现。

您需要使用defaultdict:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d['a'].append(1)
>>> d['a'].append(2)
>>> d['b'].append(3)
>>> d['c'].append(4)
>>> d['b'].append(5)
>>> print(d['a'])
[1, 2]
>>> print(d)
defaultdict(<type 'list'>, {'a': [1, 2], 'c': [4], 'b': [3, 5]})

如果要存储其他对象,例如字典,只需将其作为可调用对象传递:

>>> d = defaultdict(dict)
>>> d['a']['values'] = []
>>> d['b']['values'] = []
>>> d['a']['values'].append('a')
>>> d['a']['values'].append('b')
>>> print(d)
defaultdict(<type 'dict'>, {'a': {'values': ['a', 'b']}, 'b': {'values': []}})

也许我错过了什么,但是你不能使用单一的字典吗?

L = {
    1 : 'eggs', 
    2 : 'bacon', 
    6 : 'sausage',
    9 : 'spam'
    }

你可以做L.get(ID)。这将返回值(鸡蛋等),如果ID不在字典中,则返回None

您似乎正在进行逆字典查找,即按值查找而不是按键查找。逆字典查找- Python提供了一些指针来指导如何高效地完成此操作。

最新更新