在Python中查找与多个值关联的键

3 投票
3 回答
6854 浏览
提问于 2025-04-16 08:52

对于这种类型的字典

{'key1': ['v1','v2','v3', ...],
 'key2': ['v2','v4', ...],
  ... }

我该如何做

  1. 找到与某个值 v 相关联的任何键
  2. 把这个键和它对应的值打印到一个新的字典里

3 个回答

0

在Python 3中,这个用法更好用:

>>> old_dict = {'key1':['v1','v2','v3'], 'key2':['v2','v4']}
>>> keys_with_value = [k for k, v in old_dict.items() if "v2" in v]
>>> new_dict = {k: v for k, v in old_dict.items() if "v2" in v}

结果和Daniel DiPaolo的一样。注意这里用的是.items()而不是.iteritems()。

1

其实,先回答第二个问题(把找到的匹配对放到一个新字典里)会更快更简单,然后再从这个新字典中提取出键,就可以回答第一个问题了。

old_dict = {'key1': ['v1','v2','v3','v56','v99'],
            'key2': ['v2','v4','v42','v17'],
            'key3': ['v0','v3','v4','v17','v49'],
            'key4': ['v23','v14','v42'],
           }

v = 'v42'
new_dict = dict(pair for pair in old_dict.iteritems() if v in pair[1])
print 'new_dict:', new_dict
# new_dict: {'key2': ['v2', 'v4', 'v42', 'v17'], 'key4': ['v23', 'v14', 'v42']}

keys_with_value = new_dict.keys()
print 'keys_with_value:', keys_with_value
# keys_with_value: ['key2', 'key4']
1
# answer to 1st question
keys_with_value = [k for k, v in old_dict.iteritems() if "whatever_value" in v]

# answer to 2nd question
new_dict = {}   
for k in keys_with_value:
   new_dict[k] = old_dict[k]

示例:

>>> old_dict = {'key1':['v1','v2','v3'], 'key2':['v2','v4']}
>>> keys_with_value = [k for k, v in old_dict.iteritems() if "v2" in v]
>>> new_dict = {}
>>> for k in keys_with_value:
       new_dict[k] = old_dict[k]

>>> new_dict
{'key2': ['v2', 'v4'], 'key1': ['v1', 'v2', 'v3']}

>>> new_dict = {}
>>> keys_with_other_value = [k for k, v in old_dict.iteritems() if "v1" in v]
>>> for k in keys_with_other_value:
       new_dict[k] = old_dict[k]

>>> new_dict
{'key1': ['v1', 'v2', 'v3']}

撰写回答