1

名前が変数に由来する辞書を作成しようとしています。

より良い方法があるかもしれないので、これが状況です。私は API を使用して「オブジェクト」の属性を取得しています。(名前、説明、X、Y、Z)など。この情報を「オブジェクト」ごとにデータを保持する方法で保存したい。

この情報を取得するために、API はすべての「オブジェクト」を反復処理します。

だから私の提案は、オブジェクト名が「キャプチャ」したいものの1つである場合、次のようにその名前で辞書を作成したいということでした:

ObjectName = {'Description': VarDescrption, 'X': VarX.. etc}

(私が言うところで"Varetc..."は、API によって渡されたその属性の値になります。

事前に名前のリストを知っているので、非常に長いIfツリーを使用できますが、これを実現するためのより簡単にコーディングできるものを探しています。(コードを追加しすぎずに拡張可能)

ここに私が持っているコードがあります:

def py_cell_object():
    #object counter - unrelated to question
    addtototal()
    #is this an object I want?
    if aw.aw_string (239)[:5] == "TDT3_":
        #If yes, make a dictionary with the object description as the name of the dictionary.
        vars()[aw.aw_string (239)]={'X': aw.aw_int (232), 'Y': aw.aw_int (233), 'Z': aw.aw_int (234), 'No': aw.aw_int (231)}
        #print back result to test
        for key in aw.aw_string (239):
            print 'key=%s, value=%s' % (key, aw.aw_string (239)[key])

「aw」とは何かを示すコードの最初の 2 行を次に示します。

from ctypes import *
aw = CDLL("aw")

API 呼び出しの数字を説明するには:

231 AW_OBJECT_NUMBER、

232 AW_OBJECT_X、

233 AW_OBJECT_Y、

234 AW_OBJECT_Z、

239 AW_OBJECT_DESCRIPTION、

231 ~ 234 は整数、239 は文字列です。

4

3 に答える 3

0

これは、本番環境で使用している実際のコードです

それが役に立てば幸い。

        cveDict = {}
        # StrVul is a python list holding list of vulnerabilities belonging to a report
        report = Report.objects.get(pk=report_id)
        vul = Vulnerability.objects.filter(report_id=report_id)
        strVul = map(str, vul)
        # fill up the python dict, += 1 if cvetype already exists
        for cve in strVul:
            i = Cve.objects.get(id=cve)
            if i.vul_cvetype in cveDict.keys():
                cveDict[i.vul_cvetype] += 1
            else:
                cveDict[i.vul_cvetype] = 1
于 2013-06-20T05:29:47.820 に答える