列表中的动态变量

时间:2015-12-30 14:52:15

标签: python variables dynamic

这与Python creating dynamic global variable from list类似,但我仍感到困惑。

我以半专有格式获得了大量的flo数据。我已经使用Python将数据剥离到我的需要,并将数据保存到名为badactor.json的json文件中,并以下列格式保存:

[saddr as a integer, daddr as a integer, port, date as Julian, time as decimal number]

任意示例[1053464536, 1232644361, 2222, 2014260, 15009]

我想查看我的每周/每月flo日志,并按照Julian日期保存所有内容。首先,我想查看日志并创建一个根据发生的Julian日期命名的列表,即2014260,然后将其保存为同名2014260.json。我有以下内容,但它给了我一个错误:

#!/usr/bin/python

import sys
import json
import time
from datetime import datetime

import calendar
#these are varibles I've had to use throughout, kinda a boiler plate for now
x=0
templist2 = []
templist3 = []
templist4 = []
templist5 = []
bad = {}
#this is my list of "bad actors", list is in the following format
#[saddr as a integer, daddr as a integer, port, date as Julian, time  as decimal number]
#or an arbitrary example [1053464536, 1232644361, 2222, 2014260, 15009]
badactor = 'badactor.json'

with open(badactor, 'r') as f1:
    badact = json.load(f1)
f1.close()

for i in badact:
    print i[3] #troubleshooting to verify my value is being read in
    tmp = str(i[3])
    print tmp#again just troubleshooting
    tl=[i[0],i[4],i[1],i[2]]
    bad[tmp]=bad[tmp]+tl
    print bad[tmp]

尝试创建变量会给我以下错误:

Traceback (most recent call last):
  File "savetofiles.py", line 39, in <module>
    bad[tmp]=bad[tmp]+tl
KeyError: '2014260'

2 个答案:

答案 0 :(得分:2)

当您的代码执行时,“坏”字典中没有键“2014260”。

你的问题在这里:

bad[tmp]=bad[tmp]+tl

你说“将t1添加到不存在的东西。”

相反,您似乎想要这样做:

bad[tmp]=tl

答案 1 :(得分:0)

我建议您将bad初始化为空collections.defaultdict而不是常规内置dict。即。

import collections
  ...
bad = collections.defaultdict(list)

这样,第一次遇到日期键时,将自动为您创建初始空list值,并且您从bad[tmp]=bad[tmp]+tl语句中获得的错误将会消失,因为它会有效变为bad[tmp]=list()+tl - list()调用刚创建并返回空列表 - 第一次遇到特定日期。

还不清楚您是否真的需要tmp = str(i[3])转换,因为任何非可变类型的值都是有效的字典(或defaultdict)键,而不仅仅是字符串 - 假设i[3]不是已经是一个字符串了。无论如何,如果您将结果命名为其他代码,后续代码将更具可读性,例如julian_date = i[3](如果确实需要转换,则为julian_date = str(i[3]))。