遍历字典列表以提取 python 中的特定 key/values
Iterating through list of dictionaries to extract specific key/values in python
我有一个字典列表:
lofd = [{'a':'123', 'b':'abc', 'c': {'ca':['1','2'],'cb':['3','4']},'d':{'da':['1','2'], 'db':['1','2']}]
我需要遍历它以将其提取到新数据集中:
new_lofd = [{'a':'123', 'c':{'ca':['1','2'], 'd':{'db':['1','2']}]
如何循环访问特定的 key/values?
您可以先将阁楼列表转换成这样的字典
lofd = [{'a':'123', 'b':'abc', 'c': {'ca':['1','2'],'cb':['3','4']},'d':{'da':['1','2'], 'db':['1','2']}}]
dic = lofd[0]
一个简单的循环就可以完成这项工作。否则,您无法直接遍历列表,因为其中只有一个巨大的字典元素。
您有一个嵌套的数据结构,通常很难提取特定项目。在你的情况下:
- 迭代每个级别
- 创建白名单密钥的新子字典
- 将子字典合并在一起
请参阅下面的注释示例。
给定
lofd = [
{"a": "123",
"b": "abc",
"c": {"ca": ["1", "2"],
"cb": ["3", "4"]},
"d": {"da": ["1", "2"],
"db": ["1", "2"]}
}
]
# ^ ^
# | |___ level II
# \__________level I
每个级别选择所需的键:
level_i_keys = {"a", "c", "d"}
level_ii_keys = {"ca", "db"}
代码
res = {}
for k, v in lofd[0].items(): # 1
if k not in level_i_keys:
continue
if not isinstance(v, dict):
sub = {k: v} # 2
else:
sub = {k: {k2: v2 for k2, v2 in v.items() if k2 in level_ii_keys}} # 1, 2
res.update(sub) # 3
new_lofd = [res]
new_lofd
输出
[
{"a":"123",
"c": {"ca":["1","2"]},
"d": {"db":["1","2"]}
}
]
我有一个字典列表:
lofd = [{'a':'123', 'b':'abc', 'c': {'ca':['1','2'],'cb':['3','4']},'d':{'da':['1','2'], 'db':['1','2']}]
我需要遍历它以将其提取到新数据集中:
new_lofd = [{'a':'123', 'c':{'ca':['1','2'], 'd':{'db':['1','2']}]
如何循环访问特定的 key/values?
您可以先将阁楼列表转换成这样的字典
lofd = [{'a':'123', 'b':'abc', 'c': {'ca':['1','2'],'cb':['3','4']},'d':{'da':['1','2'], 'db':['1','2']}}]
dic = lofd[0]
一个简单的循环就可以完成这项工作。否则,您无法直接遍历列表,因为其中只有一个巨大的字典元素。
您有一个嵌套的数据结构,通常很难提取特定项目。在你的情况下:
- 迭代每个级别
- 创建白名单密钥的新子字典
- 将子字典合并在一起
请参阅下面的注释示例。
给定
lofd = [
{"a": "123",
"b": "abc",
"c": {"ca": ["1", "2"],
"cb": ["3", "4"]},
"d": {"da": ["1", "2"],
"db": ["1", "2"]}
}
]
# ^ ^
# | |___ level II
# \__________level I
每个级别选择所需的键:
level_i_keys = {"a", "c", "d"}
level_ii_keys = {"ca", "db"}
代码
res = {}
for k, v in lofd[0].items(): # 1
if k not in level_i_keys:
continue
if not isinstance(v, dict):
sub = {k: v} # 2
else:
sub = {k: {k2: v2 for k2, v2 in v.items() if k2 in level_ii_keys}} # 1, 2
res.update(sub) # 3
new_lofd = [res]
new_lofd
输出
[
{"a":"123",
"c": {"ca":["1","2"]},
"d": {"db":["1","2"]}
}
]