簡體   English   中英

setDefault for python中的嵌套字典

[英]setDefault for Nested dictionary in python

如何在python中使用setdefault來嵌套字典結構。 例如..

self.table[field] = 0
self.table[date] = []
self.table[value] = {}

我想為這些設置默認。

假設self.table是一個詞典,你可以使用

self.table.setdefault(field,0)

其余的都很相似。 請注意,如果self.table已具有鍵field ,則返回與該鍵關聯的值。 僅當沒有關鍵字fieldself.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()

nb生產版本將匯總推送回Oracle引擎, - 使用GROUP函數計算每個屏幕每天的操作數 - 但嵌套字典的使用仍然(我認為)是對可能的問題的有效響應對某些旅行者的使用尚未通過這種方式。 運氣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM