2013-10-20 66 views
-2
## Dictionary List 
G046 = {'046-HOST1':'192.168.1.10', '046-HOST2':'10.1.0.1'} 
G688 = {'688-HOST1':'8.8.8.8', '688-HOST2' : '123.3.3.3'} 
## Group List 
GroupList = ['G046', 'G688'] 
for groupname in GroupList: 
    print ('Groupname is', groupname) ## prints "G046" and "G688" 
    print (dict(groupname).keys())  ## <---- error occurs 

我想打印所有字典列表中的所有项目。但我收到以下消息:打印所有字典列表中的所有项目

ValueError: dictionary update sequence element #0 has length 1; 2 is required 

有人可以帮忙吗?

回答

1

您的代码试图将字符串转换为字典。这正是dict所做的,但在这里没有意义。

相反,只需将对象直接放入GroupList即可。

GroupList = [G046, G688] 
for group in GroupList: 
    print (group.keys()) 

但我真正想要的是在每个字典项目可以在分离行打印。

我只是用pprint,这和用它做:

from pprint import pprint 
GroupList = [G046, G688] 
for group in GroupList: 
    pprint(group, width=1) # pass a small width to force multiline output 
+0

谢谢你马特,它的工作 – ychen

+0

但我真的很想在每个字典中的项目可以分开行打印。 EX:第1行:'046-HOST1':'192.168.1.10'第2行:'046-HOST2':'10.1.0.1' – ychen

+0

@ user2900685请参阅我的编辑。 –

0

我想这是你想要什么:

G046 = {'046-HOST1':'192.168.1.10', '046-HOST2':'10.1.0.1'} 
G688 = {'688-HOST1':'8.8.8.8', '688-HOST2' : '123.3.3.3'} 

GroupList = [G046, G688] # Make the items the dictionaries themselves 

for groupname in GroupList: 
    print ('Groupname is', groupname) 
    print (groupname.keys()) 

输出:

('Groupname is', {'046-HOST2': '10.1.0.1', '046-HOST1': '192.168.1.10'}) 
['046-HOST2', '046-HOST1'] 
('Groupname is', {'688-HOST2': '123.3.3.3', '688-HOST1': '8.8.8.8'}) 
['688-HOST2', '688-HOST1'] 

基本上,我所做的只是让项目在GroupList是字典,而不是字符串。我也删除dictprint (dict(groupname).keys()),因为它不是必需的。

0

正如ICodez和Matt Ball指出的,更好的方法是使用字典列表,而不是名称。如果你真的想打印字典的名字,你甚至可以列出要打印的名称。

但是,如果您真的想按照自己的方式执行此操作,则需要使用locals(),这是一个特殊函数,它返回将所有局部变量的名称映射到其值的字典。

GroupList = ['G046', 'G688'] 
for groupname in GroupList: 
    print 'Groupname is', groupname 
    print locals()[groupname].keys() 

最后一行的第一部分,locals()[groupname]使用你的字典变量名获得实际的字典,然后.keys()得到密钥,如你想。