홈>
나는 다음과 같은 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
- 답변 # 2
외부 사전의 키는 정수이므로 문자열로 변환하지 않아야합니다.
그러나 pyzwyz 다시! 액세스하려는 키를 인쇄하십시오.for row,value in data.items() : for col,v in value.items(): a=data[row][col] b=data[row+1][str(int(col)+1)]
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
관련 자료
- java - JSON 데이터를 구문 분석 할 때 키가 있는지 여부를 확인하는 방법
- dictionary - Julia의 배열 키가있는 딕
- dict python에서 키 문자열을 얻는 방법은 무엇입니까?
- shell - ls는 파일이 존재하지만 파일에 그러한 파일이나 디렉토리가 없다고 말합니다
- python - 다른 dict 목록에서 키로 dict 목록 업데이트
- python - KeyError를 수신하지만 키가 중첩 된 사전에 존재합니다
- python - 그러한 파일이나 디렉토리가 없지만 파일이 존재합니까?
- python - 키를 사용하여 중첩 된 딕트를 필터링하고 dict에서 항목 가져 오기
- dataframe - pySpark dict (키, 값, 값)
- javascript - 지도에 키가 있는지 확인
관련 질문
- Python에서 두 사전 간의 정수 값 비교
- python : 목록 및 사전의 이 기능을 이해할 수 없습니다.
- python : super가 항상 __init__에서 호출되어야 하는 이유
- python : for 루프를 사용하여 각 항목 없이 모든 목록을 인쇄하려면 어떻게 해야 합니까? 파이썬에 대안이 있습니까?
- python : 서로 다른 수준의 두 목록이 있는 중첩 JSON 파일 분해
- PyTelegramBotAPI는 python3.9에서 send_invoice를 보낼 수 없습니다.
- 사전(python, dict, 여러 플롯)에서 여러 dfs를 사용하여 루프에서 특정 수의 플롯을 플롯합니다.
- python : 파이썬 함수에서 하드 코딩된 문자열 값을 피하는 방법
- bash 스크립트에서 올바른 Python 설치를 동적으로 선택하십시오.
- python : 값이 두 번 이상 나타나면 값을 취하는 목록 만들기
그러나 행 = 4와 col = 4에서 오류가 발생하여 데이터에 데이터가 없습니다 [5] [ '5'] 요소
데이터 [ '4']와 데이터 [4]는 서로 다릅니다. 그렇기 때문에 올바른 키로 dict 요소를 가져와야합니다.