【发布时间】:2022-01-13 18:09:15
【问题描述】:
编辑:感谢@arzo 的收获
我有一个嵌套字典,结构如下:
{
"key1":"string",
"key2":[{"nestedkey":"nestedvalue"}],
"key3":[1,2,3],
"key4":[{"nestedlevel1key":[{"nestedlevel2key":"nestedlevel2value"}]}],
"key5": {},
"key6": {"regularkey": "regularvalue"},
"key7": 15
}
字典键可以包含在其中:
- 字符串
- 整数
- 字典列表
- 包含字典列表的字典列表
- 空字典
- 普通字典
问题陈述是优化一种可以处理返回字典中所有键的方法。我可以这样写:
def get_keys(dict_example):
keys = []
for k,v in dict_example.items():
keys.append(k)
if isinstance(v, dict):
for k in v.keys():
keys.append(k)
if isinstance(v, list):
if isinstance(v[0], dict):
for k,v in v[0].items():
keys.append(k)
if isinstance(v, list) and isinstance(v[0], dict):
for k in v[0].keys():
keys.append(k)
return keys
keys = get_keys(dict_example)
print(keys)
这会给我(不按特定顺序)键列表:
['key1', 'key2', 'nestedkey1', 'key3', 'key4', 'nestedlevel1key', 'nestedlevel2key', 'key5', 'key6', 'regularkey', 'key7']
但我不确定是否有一种优化方法可以简化以处理所有 6 个用例,这些用例也可以穿过阵列,不管有多少层。现在我对层数进行了启发式分析,但在这个数组中可能有更深的层需要考虑。
【问题讨论】:
-
regularkey 是不是不见了?
-
@arzo 哦,谢谢你。其实是不见了!这应该包含在其中,这需要在当前逻辑中添加另一个条件。
标签: python dictionary iteration