将值与键值匹配并获取键

时间:2018-10-07 19:05:13

标签: python list dictionary key-value

假设我需要这样做: 我需要将列表“ 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']

5 个答案:

答案 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']