通过字典值python循环列表

时间:2014-11-27 06:41:44

标签: python for-loop

我想知道是否可以循环一个值列表
例如:

lst = ['RH', 'CD241', 'C2', 'SCZD9', 'RG59L', 'WNT3A']

通过字典的值
例如:

ref_dict = {
    '': [''], '6005': ['RH50A', 'CD241', 'SLC42A1'], '603': [''],
    '6000': [''], '8787': ['PERRS', 'RGS9L', 'MGC26458'],
    '41': ['ACCN2', 'BNaC2', 'hBNaC2'], '8490': [''],
    '9628': [''], '5999': ['SCZD9']
}

要检查列表中的单个值是否具有字典中的值,如果它具有该值,则它将返回该值所在的键。

示例: lst值CD241在字典'6005': ['RH50A, CD241, SLC42A1']中,它会返回键"6005"

3 个答案:

答案 0 :(得分:1)

类似的东西,

for key in ref_dict.keys():
    if set(lst) & set(ref_dict[key]):
        #do something with your key
        #key is the key you want

如果有多个键,其中lst中的某个元素将存在,那么您可以使用列表推导来获取这些键的列表,

[key for key in ref_dict.keys() if set(lst) & set(ref_dict[key])]

为您的案例输出['6005', '5999']

魔法发生在集合交叉部分,

(set(['RH', 'CD241', 'C2', 'SCZD9', 'RG59L', 'WNT3A']) & 
 set(['RH50A', 'CD241', 'SLC42A1']))

将为您提供 - ['CD241'],与检查值列表中是否存在lst中的内容一样好。

答案 1 :(得分:0)

试试这个:

for key in ref_dict:
    if ref_dict[key] != 0:
        return key
        #if you want to use the value 

This might link help

答案 2 :(得分:0)

from collections import defaultdict

lst = ['RH', 'CD241', 'C2', 'SCZD9', 'RG59L', 'WNT3A']
ref_dict = {
    '': [''], '6005': ['RH50A, CD241, SLC42A1'], '603': [''],
    '6000': [''], '8787': ['PERRS, RGS9L, MGC26458'],
    '41': ['ACCN2, BNaC2, hBNaC2'], '8490': [''],
    '9628': [''], '5999': ['SCZD9']
}


all_values = defaultdict(list)
for key in ref_dict:
    for value in (map(lambda x: x.strip(), ref_dict[key][0].split(","))):
        all_values[value].append(key)

print all_values['CD241'] # ['6005']