字典,查找值的公共键

2024-10-01 02:25:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

下一个元素是

^{pr2}$

等等。在

key1'2383495'key2(或第一个字典的值)CmstrkCrateChannel等,其各自的值对于不同的key1可能相同(所有的key1都是不同的)

我是说,我怎么知道两个或多个值可以有一个共同的key1 如果我输入branchController04,CMS_TRACKER_SY1527_9,我需要所有具有该属性的key1。在

我已经编写了一个脚本,它为key2的某个值返回key1(例如,我键入channel002\n,并返回'54654556'),但我不知道常见的键。在


Tags: 元素字典cmschanneltrackerkey2key1crate
2条回答
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')

运行:

^{pr2}$

如果我没听错,你就不知道你在找哪一个。在

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。如果是:

^{pr2}$

我使用一个集合,以防在一个子字典中有多个k2值匹配keyword

相关问题 更多 >