如何解决将嵌套键名存储在变量中
我有一个字典foo
,其中可能包含0..x个键,其中一些键是嵌套的。我有一个键列表,如果它们存在于foo
中,我想使用不同的键名将它们的值添加到不同的字典bar
中。由于我不知道foo
中是否存在每个键,因此需要检查字典中是否存在它们,如果不存在,则将bar
中的值分配为None
存在。例如:
foo = {"ex1": "1","ex2": "2","ex3": {"ex3nest": "3"},"ex4": "4","ex5": "5"}
field_mappings = {"bar1": "ex1","bar2": "ex2","bar4": "ex4"}
bar = {}
for key,value in field_mappings.items():
bar[key] = foo[value] if value in foo else None
bar的值将正确为:
{"bar1": "1","bar2": "2","bar4": "4"}
不过,我想向bar
添加一个包含嵌套ex3nest
键值的键,例如:
field_mappings = {"bar1": "ex1","bar3": key for ex3nest here,"bar4": "ex4"}
我看不到可以分配给bar3
键的任何值,该值可以插入到循环中的value
中,以插入ex3nest
的值。
解决方法
嘿,如果我对问题的理解正确,可以使用此代码,假设您在嵌套字典中有一个键:
foo = {"ex1": "1","ex2": "2","ex3": {"ex3nest": "3"},"ex4": "4","ex5": "5"}
field_mappings = {"bar1": "ex1","bar2": "ex2","bar3": "ex3","bar4": "ex4"}
bar = {}
for key,value in field_mappings.items():
if value in foo:
if type(foo[value])==type({}):
bar[key] = foo[value].keys()[0]
else:
bar[key] = foo[value]
else:
bar[key] = None
或如果嵌套字典中有多个键,则使用此键:
bar = {}
for key,value in field_mappings.items():
if value in foo:
if type(foo[value])==type({}):
bar[key] = ",".join(foo[value].keys())
else:
bar[key] = foo[value]
else:
bar[key] = None
,
我相信有更好的方法,但是我将使用ex3.ex3nest
样式作为键(从js对象中借用的样式)。
foo = {
"ex1": "1","ex3": {
"ex3nest": "3"
},"ex5": "5","ex6": {
"ex6nest1": {
"ex6nest2": "6"
}
},"ex8": {
"ex8nest1": {
"ex8nest2": "8"
}
},}
field_mappings = {
"bar1": "ex1","bar3": "ex3.ex3nest","bar4": "ex4","bar5": "ex5","bar6": "ex6.ex6nest1.ex6nest2",# 2 levels deep
"bar7": "ex7",# doesn't exists
"bar8": "ex8.INVALID_KEY",# oops!
}
bar = {}
for key,value in field_mappings.items():
nested_keys = value.split(".")
bar_value = foo
for curr_key in nested_keys:
bar_value = bar_value.get(curr_key,None)
if bar_value is None:
break
bar[key] = bar_value
print(bar)
输出
{'bar1': '1','bar2': '2','bar3': '3','bar4': '4','bar5': '5','bar6': '6','bar7': None,'bar8': None}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。