0

同じ形式に従う 100 以上のファイルを解析しています。たとえば、1 つのファイルについて、リスト内の 2 つのキーと複数の値で構成される辞書があります。

   temp2 = {
  '0.1995': ['X3:GATE', 'IN1', 'IN1', 'X7:GATE', 'X4:GATE', 'IN2', 'IN2', 'X8:GATE'],
  '0.399': ['X4:GATE', 'Y', 'Y', 'X3:GATE', 'Y', 'X8:SRC', 'X1:GATE', 'IN0', 'IN0', 'X5:GATE']

temp2 ディクショナリを作成するコードは次のとおりです。

#temp_delvt_list, temp_pin_list is from an external function
for delvt, pin in zip(temp_delvt_list, temp_pin_list):
                temp[delvt].append(pin) #dictionary with delvt and pin names for cell

            for line in SPFFile1:
#                   print line
                for delvt_keys,pin_values in temp.items():
#                   if re.match('[RC].*(?:i%s)' % '|'.join(pin_values), line): //couldn't get working
                    if re.search('(?i)' '|'.join(pin_values),line) and re.match('R',line):
                        #print delvt_keys
                        line_split = line.split(" ")
                        temp_list.append(delvt_keys)
                        temp_list.append(delvt_keys) #duplicated to create balanced list with temp_search_list
                        temp_search_list.append(line_split[1])
                        temp_search_list.append(line_split[2])
#                       print temp_list
#                       print temp_search_list
            SPFFile1.close()
            for d, p in zip(temp_list, temp_search_list):
                #print temp2[d]
            #   print re.sub(':SRC',':ISI',p)
                temp2[d].append(p) #dictionary with delvt and pin names for cell
#           print temp2

}

各キーの値を検索してから、Y 値のないキー (0.1995) を検索しようとしています。Y 値を持つキー (0.399) にも表示されるそのキーに表示されるすべての値を削除します。キー値は次のとおりです。ハードコーディングされておらず、変更される可能性があります。

出力は次のようになります。

temp2 = {
  '0.1995': ['X3:GATE', 'IN1', 'IN1', 'X7:GATE', 'X4:GATE', 'IN2', 'IN2', 'X8:GATE'],
  '0.399': ['Y', 'Y','Y', 'X8:SRC', 'X1:GATE', 'IN0', 'IN0', 'X5:GATE']
}

これが私がこれまでに理解したコードです:

        for test_d, test_p in temp2.items():
            if not re.search('Y', ' '.join(test_p)) :
                for x in test_p:
                    print x
            else:
                for y in test_p:
                    print y

print ステートメントを、比較対象のいずれかのリストに置き換える必要があると思います。

4

1 に答える 1

2

おそらくあなたが探している

>>> temp2 = {
  '0.1995': ['X3:GATE', 'IN1', 'IN1', 'X7:GATE', 'X4:GATE', 'IN2', 'IN2', 'X8:GATE'],
  '0.399': ['X4:GATE', 'Y', 'Y', 'X3:GATE', 'Y', 'X8:SRC', 'X1:GATE', 'IN0', 'IN0', 'X5:GATE']
}
>>> _set = set(temp2['0.1995'])
>>> temp2['0.399'] = [e for e in temp2['0.399'] if e not in _set]
>>> import pprint
>>> pp = PrettyPrinter(indent = 4)
>>> pp.pprint(temp2)
{   '0.1995': [   'X3:GATE',
                  'IN1',
                  'IN1',
                  'X7:GATE',
                  'X4:GATE',
                  'IN2',
                  'IN2',
                  'X8:GATE'],
    '0.399': ['Y', 'Y', 'Y', 'X8:SRC', 'X1:GATE', 'IN0', 'IN0', 'X5:GATE']}
>>> 
于 2013-01-16T03:53:10.677 に答える