我有一本字典。我想像python如何从字典中获取值一样显示字典。 举例说明如下:
example = {"a": 1, "b": "2", "c": 3, "d": {"x": "b", "y": "p", "q": {"w": 1, "z": "2"}}}
value_dict = {}
def recursive_items(dictionary):
for key in dictionary:
sub_data = dictionary[key]
if isinstance(sub_data, dict):
new_dict = {}
for sub_key in sub_data:
# new_dict[f"{key}.{sub_key}"]=sub_data[sub_key]
new_dict[f"{key}.{sub_key}"] = f"data.get('{key}').get('{sub_key}')"
recursive_items(new_dict)
else:
value_dict[key]=dictionary[key]
return value_dict
items=recursive_items(example)
print(items)
当前输出为:
{'a': 1, 'b': '2', 'c': 3, 'd.x': "data.get('d').get('x')", 'd.y': "data.get('d').get('y')", 'd.q': "data.get('d').get('q')"}
但我想要如下输出:
{'a': "data.get('a')", 'b': "data.get('b')", 'c': "data.get('c')", 'd.x': "data.get('d').get('x')", 'd.y': "data.get('d').get('y')", 'd.q.w': "data.get('d').get('q').get('w'),'d.q.z': "data.get('d').get('q').get('z')"}
答案 0 :(得分:1)
您没有递归字典,此外,在 else 部分您没有设置键的路径,例如:
value_dict[key]= f"data.get('{key}')"
其实在这类问题中,我会建议你把问题分成几个部分,然后再去解决它们。比如这个问题,有两种情况
value_dict[key_str]= path_str
其中 key_str 是该键的路径,path_str 是 f"data.get()" 等格式的值。我为此配置了以下解决方案。您可以自行修改或优化代码。
example = {"a": 1, "b": "2", "c": 3, "d": {"x": "b", "y": "p", "q": {"w": 1, "z": "2"}}}
value_dict = {}
def recursive_items(dictionary,path=None):
for key in dictionary:
sub_data = dictionary[key]
if isinstance(sub_data, dict):
if path is None:
recursive_items(sub_data,f"{key}")
else:
recursive_items(sub_data,f"{path}.{key}")
else:
path_str = "data"
key_str = key
if not path is None:
key_str = f"{path}.{key}"
path_keys = path.split('.')
for p_key in path_keys:
path_str = f"{path_str}.get('{p_key}')"
path_str = f"{path_str}.get('{key}')"
value_dict[key_str]= path_str
return value_dict
items=recursive_items(example)
print(items)
这段代码的输出是
<块引用>{'a': "data.get('a')", 'b': "data.get('b')", 'c': "data.get('c')", ' d.x': "data.get('d').get('x')", 'd.y': "data.get('d').get('y')", 'dqw ': "data.get('d').get('q').get('w')", 'dqz': "data.get('d').get('q').get ('z')"}