这是我的代码。我正在尝试构建一个名称列表来创建一堆默认值。然后我想通过调用函数来修改这些默认的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?
答案 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'
,但它是一个字符串(内存中的对象),而不是标签。