带迭代的二维字典

Bla*_*Cat 2 python dictionary set

我想收集已安装的软件包及其主机版本来创建网格。主机不一定具有相同的软件包。例如:

在此输入图像描述

在第一步中,我想简单存储并打印这些值。我应该使用什么数据结构?

我想以某种方式存储数据,如下所示:

for .. 
  # read values
  versions[package][host] = version
Run Code Online (Sandbox Code Playgroud)

我想像这样打印这些值:

for packagename in packagenames
  print packagename + ": "
  for host in hosts 
    if versions[host][package] is not None
      print versions[host][package]
    print ";"
  print "\n"
Run Code Online (Sandbox Code Playgroud)

但是因为我不知道有多少个包,并且并非所有包都存在于每个主机中,所以我不知道如何执行此操作。我想我应该使用字典,但我不知道如何。

mii*_*lek 5

使用 adefaultdict将是一个不错的选择。您可以填写您的字典,如下例所示:

from collections import defaultdict

versions = defaultdict(dict)

versions["openssl"]["host1"] = "1.0.1e"
versions["openssl"]["host2"] = "1.0.1e"
...
Run Code Online (Sandbox Code Playgroud)

通过使用 a defaultdict,您可以按照您的建议简单地使用循环存储您的配置。

from collections import defaultdict

versions = defaultdict(dict)
for .. 
    # read values
    versions[package][host] = version
Run Code Online (Sandbox Code Playgroud)

打印字典可以这样完成:

for package, hosts in versions.items():
    print package + ": "
    for host, version in hosts:
        print host + ": " version 
    print "\n" 
Run Code Online (Sandbox Code Playgroud)