字典中的字典,查找值的共同键
我有一个很大的字典,里面包含了很多字典,结构大概是这样的:
'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
(也就是第一个字典的值)可能是 Cmstrk
、Crate
、...、Channel
等等,每个 key1
对应的值可能会在不同的 key1
中是一样的(所有的 key1
之间都是不同的)。
我想知道两个或多个值可以共享的 key1
,也就是说,如果我输入 branchController04,CMS_TRACKER_SY1527_9
,我需要找出所有具有这个属性的 key1
。
我已经写了一个脚本,可以根据某个 key2
的值返回对应的 key1
(比如我输入 channel002\n
,它会返回 '54654556'
),但是我不知道如何找到共享的 key1
。
2 个回答
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')
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
匹配的情况。