我想在下面的列表中标识包含键值对“Keya”的字典:“123a”,在本例中是ID1。你知道吗
lst = {ID1:{'Keya':'123a','Keyb':456,'Keyc':789},ID2:{'Keya':'132a','Keyb':654,'Keyc':987},ID3:{'Keya':'5433a','Keyb':222,'Keyc':333},ID4:{'Keya':'444a','Keyb':777,'Keyc':666}}
可以安全地假设所有字典都有相同的键,但值不同。你知道吗
目前,我有以下方法来确定哪个字典的键“Keya”的值为“123a”,但是有没有一种更短更快的方法?你知道吗
DictionaryNames = map(lambda Dict: str(Dict),lst)
Dictionaries = [i[1] for i in lst.items()]
Dictionaries = map(lambda Dict: str(Dict),Dictionaries)
Dict = filter(lambda item:'123a' in item,Dictionaries)
val = DictionaryNames[Dictionaries.index(Dict[0])]
return val
如果你真的有一个字典列表,这将是:
因为您实际上有一个字典字典,并且您需要与字典关联的键,所以它是:
这将返回第一个匹配值。如果你绝对确定只有一个,或者如果你不在乎你得到的是多个,如果你对一个
StopIteration
例外感到满意,如果你错了,没有一个例外,那就是你想要的。你知道吗如果需要所有匹配的值,只需对列表执行相同的操作:
当然,该列表可以有0、1或17个值。你知道吗
既然你想要最快的速度,你应该缩短你的搜索,一旦你找到你要找的数据。不需要遍历整个列表,也不需要生成任何临时字典:
您只需执行
[name for name, d in lst.iteritems() if d['Keya']=='123a']
即可获得lst
中具有该键值的所有词典的列表。如果你知道只有一个,你可以用[name for name, d in lst.iteritems() if d['Keya']=='123a'][0]
得到它。(正如安迪在评论中提到的,你的名字lst
令人误解,因为lst
实际上是一本词典,而不是一个列表。)相关问题 更多 >
编程相关推荐