중첩 된 사전 구조에 대해 python에서 setdefault를 사용하려면 어떻게해야합니까? 예 ..python에서 중첩 된 사전에 대한 setDefault
self.table[field] = 0
self.table[date] = []
self.table[value] = {}
나는이에 대한을 setDefault하고 싶습니다. self.table
가정
중첩 된 사전 구조에 대해 python에서 setdefault를 사용하려면 어떻게해야합니까? 예 ..python에서 중첩 된 사전에 대한 setDefault
self.table[field] = 0
self.table[date] = []
self.table[value] = {}
나는이에 대한을 setDefault하고 싶습니다. self.table
가정
당신은
self.table.setdefault(field,0)
나머지는 모두 비슷 사용할 수하는 딕셔너리입니다. self.table
에 이미 field
키가있는 경우 해당 키와 연관된 값이 반환됩니다. 키와 field
이 self.table[field]
세트
0으로 편집하지있을 경우에만 :는 아마도이에 가까운 당신이 원하는 :
대신 수의 트랙을 유지import collections
class Foo(object):
def __init__(self):
self.CompleteAnalysis=collections.defaultdict(
lambda: collections.defaultdict(list))
def getFilledFields(self,sentence):
field, field_value, field_date = sentence.split('|')
field_value = field_value.strip('\n')
field_date = field_date.strip('\n')
self.CompleteAnalysis[field]['date'].append(field_date)
self.CompleteAnalysis[field]['value'].append(field_value)
foo=Foo()
foo.getFilledFields('A|1|2000-1-1')
foo.getFilledFields('A|2|2000-1-2')
print(foo.CompleteAnalysis['A']['date'])
# ['2000-1-1', '2000-1-2']
print(foo.CompleteAnalysis['A']['value'])
# ['1', '2']
는 아마도 단지 길이를 가지고 목록의 :
print(len(foo.CompleteAnalysis['A']['value']))
# 2
그것은 골동품입니다. 나는 대답을 찾고 와서 내 학습을 나누겠다고 생각했습니다. 나는 화면 ID, 취한 조치 및 기록 된 날짜별로 사용자 조치를 요약하려고했습니다. 이 프로토 타입은 Oracle XE 에디션, Python 3.5 (64 비트) 및 pyodbc 패키지를 사용합니다.
import pyodbc
spam = {}
sqlQuery = ' \
SELECT actionexecutedon, screenid, eventtype \
FROM bmx_production_history \
'
connection= pyodbc.connect('dsn=XE;uid=hr;pwd=hr')
try:
cursor = connection.cursor()
cursor.execute(sqlQuery)
records = cursor.fetchall()
for record in records:
spam.setdefault(record.SCREENID, {})
spam[record.SCREENID].setdefault(record.EVENTTYPE, {})
spam[record.SCREENID][record.EVENTTYPE].setdefault(record.ACTIONEXECUTEDON.strftime('%Y-%m-%d'), 0)
spam[record.SCREENID][record.EVENTTYPE][record.ACTIONEXECUTEDON.strftime('%Y-%m-%d')]+=1
print(spam)
finally:
connection.close()
n.b. 프로덕션 버전은 요약을 다시 Oracle 엔진으로 푸시합니다. - GROUP 함수를 사용하여 하루에 화면 당 작업 수를 계산합니다. 그러나 중첩 된 사전을 사용하면 여전히 질문에 대한 유효한 응답이됩니다 (생각합니다). 이런 식으로 지나가려면 동료 여행자에게 사용하십시오. 운.
한 번 더 쿼리 해 주셔서 감사합니다. 어떻게 self.table [tablename] [field] [count] = 0을 설정할 수 있습니까? – Jayanth
이런 식으로 작동하지만 작동하지 않습니다. : - (( 데프 getFilledFields (자기, 문장) : 카운트 = 0 날짜 = [] 값 = [] 필드 = sentence.split ('|') [0] FIELD_VALUE = sentence.split를 ('| '] [1] .strip ('\ n ') field_date = sentence.split ('| ') [2] .strip ('\ n ') try : self.CompleteAnalysis [field] [count] = self [field] [count] + 1 제외 : self.CompleteAnalysis [field] [count] = 0 self.CompleteAnalysis [필드] [날짜] .append (필드 _ 날짜) self.CompleteAnalysis [필드] [값] .append (field_value) – Jayanth
샘플 문장의 모양과 자기가 원하는 것을 질문에 추가 할 수 있습니까? CompleteAnalysis는'self.getFilledFields (sentence)'를 호출 한 것처럼 보이게 할 것인가? 나는 추측을하지만 확실치 않습니다. – unutbu