假设我需要这样做: 我需要将列表“ check_keys”中的值与字典“ parm”中的键值进行匹配,并将匹配的键以相同的顺序存储到新列表“插入”中
parm = {'f': 'w', 'l': 'b', 'b': 'y', 'u': 'o', 't': 'r', 'r': 'g'}
check_keys = ['r','b','o','g','w','y']
insert = ['t','l','u','r','f','b']
答案 0 :(得分:1)
一种可能的方法是反转字典,平均可以在线性时间(相对于parm dict的大小)中完成。
一旦字典反向,您搜索的值将成为键 现在,您可以很容易地访问到check_keys列表中的每个键O(1)。
rev_parm = dict((v, k) for k, v in parm.items())
insert = [rev_parm[k] for k in check_keys]
答案 1 :(得分:0)
也许是这样吗?
insert = []
for k, v in parm.items():
if k in check_keys:
insert.append(k)
或更短的版本:
insert = [k for k, v in parm.items() if k in check_keys]
答案 2 :(得分:0)
花了一些时间,但我想我想通了。
如果我是正确的话,您将不会从值到键反向查找字典。 最简单的方法是确定反向字典。
rparm = dict( (value,key) for key,value in parm.items())
然后匹配数据,例如
insert = [rparm[key] for key in check_keys]
很抱歉使用所有此列表和生成器理解。如果我们不熟悉它们,可以添加经典的for循环版本。
答案 3 :(得分:0)
这不是哈希表/字典的很好用。给定字典的键,通过哈希表,您可以快速访问值。在这里,您尝试访问给定值的字典键(即相反)。
这很糟糕,因为:
parm = {'a': 'r', 'b': 'r'}
,check_keys = [r]
,则不确定是得到[a]
还是[b]
。 说了一切之后,这应该可以解决您的问题:
parm = {'f': 'w', 'l': 'b', 'b': 'y', 'u': 'o', 't': 'r', 'r': 'g'}
check_keys = ['r','b','o','g','w','y']
insert = ['t','l','u','r','f','b']
insert = []
for v in check_keys:
for k in parm:
if parm[k] == v:
insert.append(k)
print insert
当然,假设这是一个较大程序的一部分,我建议您不要使用上述方法,而应重新评估您的整个方法。
答案 4 :(得分:0)
您可以使用列表理解来解决此问题
insert = [k for i in check_keys for k in parm if parm[k] == i]
# ['t', 'l', 'u', 'r', 'f', 'b']