我有一本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",
"bar2": "ex2",
"bar3": key for ex3nest here,
"bar4": "ex4"}
我看不到可以分配给bar3
密钥的任何值,以便将其插入value
循环中ex3nest
。在尝试执行操作时,是否有办法在字符串中存储嵌套键名,或者从这里开始我的方法是完全错误的?
我相信有更好的方法,但是我会使用ex3.ex3nest
style作为键(从js对象中借用的风格)。
foo = {
"ex1": "1",
"ex2": "2",
"ex3": {
"ex3nest": "3"
},
"ex4": "4",
"ex5": "5",
"ex6": {
"ex6nest1": {
"ex6nest2": "6"
}
},
"ex8": {
"ex8nest1": {
"ex8nest2": "8"
}
},
}
field_mappings = {
"bar1": "ex1",
"bar2": "ex2",
"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}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句