Python用函数调用修改字典

时间:2016-05-20 17:50:05

标签: python dictionary

这是我的代码。我正在尝试构建一个名称列表来创建一堆默认值。然后我想通过调用函数来修改这些默认的dicts。 您可以在评论中看到问题。

#!/usr/bin/python                                                                                             

from collections import defaultdict

class Stats(object):
    def __init__(self, name, namedict):
        self.name = name
        self.namedict = namedict
    def update_stats(self, playerdict):
    self.playerdict = playerdict
        playerdict['HR'] += 1
        return(playerdict)


l = ['a', 'b', 'c']

for x in l:
    d = x + 'dict'   # trying to make a list of dict names
    print "Name is",d   # it is a string so far
    d = defaultdict(int)  # now it is a dict but what is its name?
    print d  # i have a structure here but don't know its name

stats = Stats('stats',d)

#   next test code block does not work   

#for k,v in adict.iteritems():   # adict not defined!                                                         
#    print k,v                                                                                                

# next code block does not work either
for y in l:
    dictname = y + 'dict'
    dictname = stats.update_stats(**dictname)    
# it thinks dictname is a        String 
# in general what is the right way to pass in a dictionary 
# and get it back in a modified state? 

2 个答案:

答案 0 :(得分:1)

我相信你对变量使用感到困惑。 “name”不是字典的属性;他们有钥匙和相关的价值观。您可以使变量引用字典,但此属性不是字典所固有的。

我认为你想创建新的词典,由名为 adict bdict cdict 的变量引用。要做到这一点,你需要像

这样的东西
adict = defaultdict(int)
bdict = defaultdict(int)
cdict = defaultdict(int)

如果你想在循环中处理它们,那么你需要列表的元素是字典:

dict_shelf = []
for i in range(3):
   dict_shelf.append(defaultdict(int))

这三个词典现在是dict_shelf [0],dict_shelf [1]和dict_shelf [2]。

这可以解决您的问题吗?

答案 1 :(得分:1)

似乎存在一些需要澄清的误解。

当你写:

d = x + 'dict'

您将标签d分配给字符串(例如'adict'

然后,用:

d = defaultdict(int)

重新分配标签d到某些defaultdict。它不再分配给字符串。

然后您尝试访问标签adict - 它从未被定义(已分配)。在courze中,有一个字符串'adict',但它是一个字符串(内存中的对象),而不是标签。