2014-07-22 111 views
0

我有很多線路的txt文件這樣得到價值蟒蛇關鍵

369136986 cms_trk_dcs_05:CAEN/CMS_TRACKER_SY1527_8/branchController05/easyCrate1/easyBoard03/channel002 

兩列,其中第一有編號,第二列由/分離特性的線路,都列由空間隔開。

我沒有字典的字典,其中KEY1是
出現在線路(369136986)的第一數量,該鍵具有作爲值的其他字典,其中鍵是cmstrktrackersybranchcrateboardchannel和每個鍵的鍵都有一個值cms_trk_dcs_05:CAENCMS_TRACKER_SY1527_8branchController05easyCrate1easyBoard03channel002分別,所以如果你問cmstrk(密鑰)的369136986(密鑰1)它返回cms_trk_dcs_05(值)。

如何通過賦值來獲得密鑰?我的意思是,如果我給的值CMS_TRACKER_SY1527_8我需要知道哪個key1對應的(程序應該返回369136986)。

這是我的嘗試:

input3=raw_input("Write the property(s) which modules connected you want to know, separated by a single space \n > ") 
input_list3=input3.split(' ') 
for k in input_list3: 
    print "%r" % k 
    txt.write("\t\n The modules with property %r are:\n" % k) 
    for l,m in zip(HVInfoDict.keys(),HVInfoDict.values()): 
     if k == HVInfoDict[l][m]: 
      print l 

但它返回

TypeError: unhashable type: 'dict' 

所以我怎麼能拿到第一的關鍵?

+1

是否更改爲'如果k在m.values()if語句:'得到你想要的是什麼? –

+0

你可以把輸入字典的例子更容易剪切粘貼嗎?這裏的問題是'm'有時候是一個字典,不能作爲另一個字典的關鍵字。 – jonrsharpe

+0

你也可以用'HVInfoDict.items()'替換'zip(HVInfoDict.keys(),HVInfoDict.values())',因爲它會返回相同的元組列表。 –

回答

1

m是HVInfoDict [l]中所反映的整個字典..您需要像這樣查看m中的值。

HVInfoDict = { 
    369136986: { 
     'cmstrk': 'cms_trk_dcs_05:CAEN', 
     'trackersy': 'CMS_TRACKER_SY1527_8', 
     'branch': 'branchController05', 
     'crate': 'easyCrate1', 
     'board': 'easyBoard03', 
     'channel': 'channel002' 
    } 
} 

input3 = raw_input("Write the property(s) which modules connected you want to know, separated by a single space \n > ") 
input_list3 = input3.split(' ') 
for k in input_list3: 
    print "%r" % k 
    txt.write("\t\n The modules with property %r are:\n" % k) 
    for l,m in HVInfoDict.items(): 
     if k in m.values(): 
      print l 
     else: 
      print("Does not exist!") 

輸出:

Write the property(s) which modules connected you want to know, separated by a single space 
> branchController05 CMS_TRACKER_SY1527_8 channel002 abcdefg 
'branchController05' 
369136986 
'CMS_TRACKER_SY1527_8' 
369136986 
'channel002' 
369136986 
'abcdefg' 
Does not exist! 
+0

Jhon Rudell你是對的我正在尋找錯誤的地方,非常感謝你的ansewer,我的腳本現在可以工作! – celonilanaparticle

+0

@celonilanaparticle太棒了!很高興我能幫上忙! –