我正在尝试从字典中检索一些值,应该相当容易。
无论出于何种原因,我都无法使用变量来检索值。
我有两个词典,一个带有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循环。
答案 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)]