Python: 打印包含变量的字典字典

2 投票
2 回答
5476 浏览
提问于 2025-04-17 05:26

我正在尝试从一个字典中获取一些值,这应该是比较简单的事情。

但不知为什么,我无法用一个变量来获取值。

我有两个字典,一个是 uid(用户ID)到用户名的映射(通过 getent passwd 获取),另一个字典则是每个键对应一个字典,基本上是这样的:

dMap = { 12345678: 'username' }
qDict['12345678'] = {'used': '4204224',  'grace': 'none', 'quota': '5242880'}

当然,这两个字典里还有很多其他的值,但我展示的结构就是基本概念。

qDict 的键是一个 uid(这个 uid 应该通过 dMap 字典来映射)。

我遇到问题的地方是:

for k,v in dMap.items():
    print 'Key: ',k
    print qDict[k]

当我运行脚本时,我得到了:

Traceback (most recent call last):
  File "./test.py", line 156, in ?
    main() 
  File "./test.py", line 98, in main
    print qDict[k]
KeyError: 26617862

如果我把上面那行 print qDict[k] 注释掉,只打印 k 的值,键名就能正常显示。我也可以在 for 循环外用实际的键名(比如 12345678)来引用字典:

print dMap[26617862]         # this works!
print qDict['26617862']      # this works!      #NOTE BELOW

我想要做的就是让 for 循环打印出给定键名的字典,类似于打印一个字典里的字典……

我认为问题可能在于(如果你看看下面的 #NOTE 这一行),我需要以某种方式用正确格式的变量来呈现字典(qDict)。

我是不是漏掉了什么,或者有没有更简单的方法来做到这一点?

PS:我也尝试过用 dMap.keys() 等来做 for 循环。

2 个回答

1

dMap里的键是整数,而qDict里的键是字符串。

在把你的整数k用作qDict的键之前,你需要把它转换成字符串:

for k in dMap:
    print 'Key: ',k
    print qDict[str(k)]
1

你用不同类型的键创建了两个字典。一个字典的键是整数,另一个字典的键是字符串。

正如@Mark Byers所说,你可以把整数转换成字符串来查找。

不过,我建议你还是用整数键来构建qDict。在你创建qDict的代码里,把键用int()包裹起来,这样就能确保它是整数键。

其实两种方法都可以用。但如果dMap的键是int类型,而qDict的键是str类型,那么在qDict中可能会有一些键在dMap中找不到。如果这两个字典要匹配,最好它们的键类型是一样的。而且int在效率上应该稍微好一些,所以如果你的程序规模变大,选择int会更合适。

撰写回答