Python:用变量打印字典字典

时间:2011-11-01 18:45:30

标签: python dictionary

我正在尝试从字典中检索一些值,应该相当容易。

无论出于何种原因,我都无法使用变量来检索值。

我有两个词典,一个带有uids的映射 - > usernames(通过getent passwd),以及第二个包含每个键字典的字典,基本上是:

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

显然两个词典都有更多的值,但我所展示的结构是基本概念。

qDict的键是一个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

如果我注释掉:上面的打印qDict [k]行,并且只打印k的值,则打印的键名称没有问题。我还可以使用实际的键名(12345678)引用for循环之外的字典:

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

我要做的就是让for循环打印给定键名的字典,打印字典的字典......

我认为问题是(如果你看#NOTE BELOW行)我需要以某种方式呈现字典(qDict)和正确格式化的变量。

我在这里缺少什么,或者有更简单的方法吗?

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

2 个答案:

答案 0 :(得分:1)

您使用不同类型的键为键构建了两个词典。一个dict有一个整数键,另一个有一个字符串键。

正如@Mark Byers所说,你可以将整数转换为字符串来进行查找。

但是,我建议您使用整数键构建qDict。无论您的代码是构建qDict的哪个代码,都要将密钥包装在int()中以强制它为整数密钥。

无论哪种方式都可行,真的。但如果dMap具有int个密钥且qDict具有str个密钥,则qDict中可能存在一些无法在dMap中显示的密钥,以及如果两者要匹配,那么如果他们只有相同类型的密钥则更好。并且int应该稍微提高效率,因此如果您的计划规模扩大,那么这是更好的选择。

答案 1 :(得分:0)

dMap中的键是整数,但在qDict中键是字符串。

您需要将整数k转换为字符串,然后才能将其用作qDict中的键:

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