打印所有词典列表中的所有项目

时间:2013-10-20 18:29:36

标签: python dictionary sequence

## 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

有人可以帮忙吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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中的项目成为词典,而不是字符串。我还删除了dict中的print (dict(groupname).keys()),因为它不需要。

答案 2 :(得分:0)

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

但是如果你真的想按自己的方式去做,你想使用locals(),这是一个特殊的函数,它返回将所有局部变量的名称映射到它们的值的字典。

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

最后一行的第一部分locals()[groupname]使用字典变量的名称来获取实际字典,然后.keys()获取密钥,如您所愿。