【发布时间】:2014-09-17 14:01:05
【问题描述】:
我正在尝试编写一个字典键生成器,仅当键映射的值是列表类型时才会生成键迭代器,使用递归和简单的isinstance 检查(我添加了一些打印语句我自己的利益,因为我似乎无法让这个东西运行):
def list_key_generator(inputDict):
for key in inputDict.keys():
if (isinstance(inputDict[key], dict)):
print ("Entering dict: %s " % key)
list_key_generator(inputDict[key])
elif (isinstance(inputDict[key], list)):
print ("Value is a list! key, value = %s, %s" % (key, inputDict[key]))
yield key
我一定是误解了yield(不排除其他东西),因为打印出键的递归函数完全相同:
def print_list_keys(inputDict):
for key in inputDict.keys():
if (isinstance(inputDict[key], list)):
print ("Value is a list! key, value = %s, %s" % (key, inputDict[key]))
elif (isinstance(inputDict[key], dict)):
print_list_keys(inputDict[key])
整个示例如下所示:
#!/usr/bin/python
def print_list_keys(inputDict):
for key in inputDict.keys():
if (isinstance(inputDict[key], list)):
print ("Value is a list! key, value = %s, %s" % (key, inputDict[key]))
elif (isinstance(inputDict[key], dict)):
print_list_keys(inputDict[key])
def list_key_generator(inputDict):
for key in inputDict.keys():
if (isinstance(inputDict[key], dict)):
print ("Entering dict: %s " % key)
list_key_generator(inputDict[key])
elif (isinstance(inputDict[key], list)):
print ("Value is a list! key, value = %s, %s" % (key, inputDict[key]))
yield key
def main():
inputDict = { "A" : { "x" : [0,1,2] , "y" : ["one", "two"] }, "B" : { "z" : ["one"] }, "C" : [9,8,7] }
print("Input dict : %s " % inputDict)
# Print list keys
print("print_list_keys : BEGIN")
print_list_keys(inputDict)
print("print_list_keys : END")
print("list_key_generator : BEGIN")
# Print all keys in the dict, whose values are lists.
for leafValue in list_key_generator(inputDict):
print (leafValue)
print("list_key_generator : END")
if (__name__ == "__main__"):
main()
我使用的是 Python 3.4.1,输出如下:
Input dict : {'A': {'x': [0, 1, 2], 'y': ['one', 'two']}, 'C': [9, 8, 7], 'B': {'z': ['one']}}
print_list_keys : BEGIN
Value is a list! key, value = x, [0, 1, 2]
Value is a list! key, value = y, ['one', 'two']
Value is a list! key, value = C, [9, 8, 7]
Value is a list! key, value = z, ['one']
print_list_keys : END
list_key_generator : BEGIN
Entering dict: A
Value is a list! key, value = C, [9, 8, 7]
C
Entering dict: B
list_key_generator : END
【问题讨论】:
-
你不应该在 if 的第一个分支上产生返回值吗? value = list_key_generator(inputDict[key]) 产生值
标签: python python-3.x dictionary generator