>

나는 다음과 같은 dicts dict의 구문 분석을 위해 노력하고 있습니다 :

data = {0: {},
        1: {'1': 'M_AVL_002'},
        2: {'2': 'CloudServiceAvailability'},
        3: {'3': 'P_001'},
        4: {'4': '2.592 x10^6'},
        5: {'4': 'second'},
        6: {'3': 'E_001'},
        7: {'4': ' 100 x (P_001- M_TQD_001)/P_001'},
        8: {'4': 'ISO80000'},
        9: {'4': 'percentage'},
        10: {'1': 'M_TQD_001'},
        11: {'2': 'TotalQualifiedDowntime'},
        12: {'3': 'E_001'},
        13: {'4': '?(M_QDT_001)'},
        14: {'4': 'ISO80000'},
        15: {'4': 'second'}}

다음과 같은 값에 액세스하고 싶습니다 :

for metric in XML.findall("{http://standards.iso.org/iso-iec/19086/-2/ed-1/en}Metric"):
        for row,value in data.items() :
            if (row==0):
                pass
            else :
                for col,v in value.items():
                    if (col=="1"):
                        metric.set('id',str(data[row][col]))
                    if (col=="2"):
                        metric.set('description',str(data[row][col]))
                    if (col=="3"):
                        if (str(data[row][col]).startswith("E")):
                            metric.find('{http://standards.iso.org/iso-iec/19086/-2/ed-1/en}Expression').set("id",str(data[row][col]))
                            metric.find('{http://standards.iso.org/iso-iec/19086/-2/ed-1/en}Expression').set("expressionStatement",str(data[str(int(row)+1)][str(int(col)+1)]))
                            metric.find('{http://standards.iso.org/iso-iec/19086/-2/ed-1/en}Expression').set("expressionLanguage",str(data[str(int(row)+2)][str(int(col)+1)]))
                            metric.find('{http://standards.iso.org/iso-iec/19086/-2/ed-1/en}Expression').set("unit",str(data[str(int(row)+3)][str(int(col)+1)]))
                        elif (str(data[row][col]).startswith("P")):
                            for param in metric.findall('{http://standards.iso.org/iso-iec/19086/-2/ed-1/en}Parameter'):
                                if(str(data[row][col])==param.get('id')):
                                    a=str(data[row][col])
                                    print(str(int(row)+1),str(int(col)+1))
                                    b=str(data[str(int(row)+1)][str(int(col)+1)])
                                    c=str(data[str(int(row)+2)][str(int(col)+1)])
                                    param.set("id",a)
                                    param.set("parameterStatement",b)
                                    param.set("unit",c)
                                else:
                                    pass
                        elif (str(data[row][col]).startswith("R")):
                            for rule in metric.findall('{http://standards.iso.org/iso-iec/19086/-2/ed-1/en}Rule'):
                                if(str(data[row][col])==rule.get('id')):
                                    a=str(data[row][col])
                                    b=str(data[str(int(row)+1)][str(int(col)+1)])
                                    rule.set("id",a)
                                    rule.set("ruleStatement",b)
                                else :
                                    pass

그러나 pyzwyz가 있습니다   KeyError 라인에  할당됩니다. 나는 b 를 인쇄하려고했습니다  그리고 row  row + 1 및 col + 1이 키인지 확인합니다.

프로그램이 row = 6 및 col = 3과 충돌하는 경우이 배치에 값이 있지만 row = 7 및 col = 4에도 적용되며 col

KeyError :'7'

  • 답변 # 1

    for row,value in data.items() :
        for col,v in value.items():
            a=data[row][col]
            b=data[row+1][str(int(col)+1)]
    
    

    그러나 행 = 4와 col = 4에서 오류가 발생하여 데이터에 데이터가 없습니다 [5] [ '5'] 요소

    데이터 [ '4']와 데이터 [4]는 서로 다릅니다. 그렇기 때문에 올바른 키로 dict 요소를 가져와야합니다.

  • 답변 # 2

    외부 사전의 키는 정수이므로 문자열로 변환하지 않아야합니다.

    for row,value in data.items() :
        for col,v in value.items():
            a=data[row][col]
            b=data[row+1][str(int(col)+1)]
    
    
    그러나 pyzwyz  다시! 액세스하려는 키를 인쇄하십시오.

    KeyError
    
    

    당신은 얻을 것이다 :

    for row,value in data.items() :
        for col,v in value.items():
            a=data[row][col]
            print(row+1, str(int(col)+1))
    
    

    모두 유효하지는 않습니다. 따라서 'Keydict의 KeyError이지만 키가 존재합니다'는 사실이 아닙니다!

    2 2 3 3 4 4 5 5 6 5 7 4 8 5 9 5 10 5 11 2 12 3 13 4 14 5 15 5 16 5

  • 이전 tensor - 추가 치수에 파이 토치에서 nnLinear 층의 적용
  • 다음 android - RecyclerView 어댑터 내에서 한 번에 하나의 ImageView 만 선택