Python 如何按唯一键值在有序字典列表中寻址字典?

Python 如何按唯一键值在有序字典列表中寻址字典?,python,list,dictionary,Python,List,Dictionary,(使用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'] == di

(使用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)
但是,有没有一种方法可以直接寻址该字典,而不必在找到它之前遍历列表

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

ID号可能出现在其他键值中,因此如果列表中的rec['ID'],则会产生误报


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

也许我遗漏了什么,但你不能用一本字典吗

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

然后您可以执行
L.get(ID)
。如果该ID不在目录中,则返回值(鸡蛋等)或
None

您似乎正在进行反向字典查找,即按值而不是键进行查找。有一些关于如何有效地做到这一点的建议

用例:读取记录文件(有序dict)。不同的键 具有重复出现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]})
>>从集合导入defaultdict
>>>d=默认DICT(列表)
>>>d['a'].附加(1)
>>>d['a'].附加(2)
>>>d['b'].追加(3)
>>>d['c'].追加(4)
>>>d['b'].附加(5)
>>>打印(d['a'])
[1, 2]
>>>印刷品(d)
defaultdict(,{'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': []}})
>d=defaultdict(dict)
>>>d['a']['values']=[]
>>>d['b']['values']=[]
>>>d['a']['values'].追加('a')
>>>d['a']['values'].追加('b')
>>>印刷品(d)
defaultdict(,{'a':{'values':['a','b']},'b':{'values':[]})

回到绘图板,我最终使用了
defaultdict
创建了一个dict,其中所有记录都作为子部分,每个子记录都可以通过ID寻址。因此,感谢大家,特别感谢Burhan Khalid和SiHa。