使用函数更新字典

时间:2015-10-08 21:17:32

标签: python-3.x dictionary

def customer_dictionary(balfilename):
    d = {}
    bafile = open(balfilename, 'r')
    for line in bafile:
        dic = line.split()
        d[dic[1]] = [dic[0] , dic[2]]
    return d 
    bafile.close()

def update_customer_dictionary(cdictionary, transfilename):
    transfile = open(transfilename. 'r')
    for line in transfile:
        act, trans = line.strip().split()
        if act in dictionary:
            cdictionary[act][1] += float(trans)
        else:
            cdictionary[act][2] = [act][2]


File 1:
139-28-4313     115    1056.30
706-02-6945     135   -99.06
595-74-5767     143    4289.07
972-87-1379     155    3300.26
814-50-7178     162    3571.94
632-72-6766     182    3516.77
699-77-2796     191    2565.29

File 2:
380     2932.48
192     -830.84
379     2338.82
249     3444.99
466      -88.33
466     2702.32
502     -414.31
554      881.21 

所以我有这两个函数,第一个创建一个字典,第二个使用给定的两个文件更新第一个创建的字典。我不确定我的第二个功能是否正确。任何人都可以帮助我吗?

Document for background

1 个答案:

答案 0 :(得分:0)

customer_dictionary中的第一个问题:您在return之后关闭文件,并且该行不会被执行。
打开文件的最佳方法是:

with open(balfilename, 'r') as bafile:
    for line in bafile:
        #do stuff
#when done, continue code here, no need to call close()

使用customer_dictionary创建的字典摘录:

d={'115': ['139-28-4313', '1056.30']}

键是字符串,值是两个字符串的列表。

然后在update_customer_dictionary您尝试这样做:

act="115"
trans="2930.5"
if act in d:
    d[act][1] += float(trans)
else:
    d[act][2] = [act][2]

两个问题:

  • d[act][1]是一个字符串(此处为' 1056.30')。你不能添加一个字符串和一个浮点数。我建议将字典的创建改为浮动,这似乎更合乎逻辑。
  • 如果act不在字典中,则需要创建新条目。我不太明白你试图用d[act][2]= [act][2]做什么,它不是一个有效的python线。
    您可以使用d[act]=['unknown',trans]创建新条目,但这取决于您需要实现的目标。