2013-10-20 109 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()得到密鑰,如你想。