词典字典,找到值的共同键

时间:2014-07-24 10:46:49

标签: python dictionary key lookup

我有一个很大的字典词典,里面有很多这样的元素:

'470046757': {'Cmstrk': 'cms_trk_dcs_04:CAEN', 'Crate': 'easyCrate4', 'Board': 'easyBoard10', 'Branch': 'branchController04', 'TrackerSY': 'CMS_TRACKER_SY1527_9', 'Channel': 'channel002\n'} 

,下一个元素是

'3646457': {'Cmstrk':'cms_trk_dcs_13:CAEN',...,'Channel':'channel005\n'}

等等。

key1'2383495'key2(或第一个字典的值)CmstrkCrate,...,Channel ,等等,各个值key1可能相同(所有key1之间的值不同)

我的意思是,我怎么知道两个或更多个值可能具有的key1共同点 如果我输入branchController04,CMS_TRACKER_SY1527_9,我需要拥有该属性的所有key1

我已经为key1的某个值返回key2的脚本(我输入channel002\n并返回'54654556')但我不知道密钥共同的。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您不知道您正在寻找key2

keyword = 'branchController04'
matchingKey2 = None
foundKey1s = []
for k1 in myDict:
    if not matchingKey2 :
        for k2 in myDict[k1]:
            if myDict[k1][k2]==keyword:
                matchingKey2 = k2
                foundKey1s.append(k1)
    else:
        if myDict[k1][matchingKey2]==keyword:
            foundKey1s.append(k1)

编辑:重新阅读您的问题后,我了解它可能是key2。如果是这样的话:

keyword = 'branchController04'
foundKey1s = {k1 for k2 in myDict[k1] for k1 in myDict if myDict[k1][k2]==keyword}

如果多个k2值与一个子字典中的keyword匹配,我会使用一个集

答案 1 :(得分:0)

def db_position(db, search_name):
    # Iterating over main dict
    for main_key, main_value in zip(db.keys(), db.values()):
        # over secondary dict(s)
        for secn_key, secn_value in zip(main_value.keys(), main_value.values()):
            if secn_value == search_name:
                print("Main: ", main_key)
                print("Secn: ", secn_key)

database = dict()
database.update({'470046757': {'Cmstrk': 'cms_trk_dcs_04:CAEN',
                               'Crate': 'easyCrate4',
                               'Board': 'easyBoard10',
                               'Branch': 'branchController04',
                               'TrackerSY': 'CMS_TRACKER_SY1527_9',
                               'Channel': 'channel002\n'}})
database.update({'3646457': {'Cmstrk': 'cms_trk_dcs_13:CAEN',
                             'Channel': 'channel005\n'}})

db_position(database, 'easyCrate4')

运行:

>python dicts.py
('Main: ', '470046757')
('Secn: ', 'Crate')