gpt4 book ai didi

python - 使用Python返回键嵌套字典

转载 作者:行者123 更新时间:2023-12-02 01:51:32 24 4
gpt4 key购买 nike

编辑:感谢@arzo 的帮助

我有一个嵌套字典,结构如下:

{
"key1":"string",
"key2":[{"nestedkey":"nestedvalue"}],
"key3":[1,2,3],
"key4":[{"nestedlevel1key":[{"nestedlevel2key":"nestedlevel2value"}]}],
"key5": {},
"key6": {"regularkey": "regularvalue"},
"key7": 15
}

其中字典键可以包含:

  1. 字符串
  2. 整数
  3. 字典列表
  4. 包含字典列表的字典列表
  5. 空字典
  6. 普通字典

问题陈述正在优化一个可以处理返回字典中所有键的方法。我可以写这样的东西:

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)

这将为我提供(无特定顺序) key 列表:

['key1', 'key2', 'nestedkey1', 'key3', 'key4', 'nestedlevel1key', 'nestedlevel2key', 'key5', 'key6', 'regularkey', 'key7']

但我不确定是否有一种优化方法可以简化以处理所有 6 个用例,这些用例也可以横向穿过数组,无论有多少层。现在我对级别数进行了启发式计算,但我需要考虑该数组中可能存在更深的级别。

最佳答案

它们只有两种情况需要处理:listdict,因为它们包含其他东西,然后使用递归

  • 对于 dict :保留键并搜索值
  • 对于列表:搜索值
def get_keys(item):
keys = []
if isinstance(item, dict):
for k, v in item.items():
keys.append(k)
keys.extend(get_keys(v))
elif isinstance(item, (list, tuple)):
for x in item:
keys.extend(get_keys(x))
return keys

values = {
"key1": "string", "key2": [{"nestedkey": "nestedvalue"}], "key3": [1, 2, 3],
"key4": [{"nestedlevel1key": [{"nestedlevel2key": "nestedlevel2value"}]}],
"key5": {}, "key6": {"regularkey": "regularvalue"},
}

keys = get_keys(values)
print(keys)
# ['key1', 'key2', 'nestedkey', 'key3', 'key4', 'nestedlevel1key', 'nestedlevel2key', 'key5', 'key6', 'regularkey']

关于python - 使用Python返回键嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70280970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com