python - 使用列表中的值遍历字典
问题描述
我正在处理一些数据,这些数据的每条记录都有不断变化的键。我从每条记录中收集了一个主键列表并将它们存储在一个列表中。然后我想遍历列表以使用 a 提取适当的值,但由于列表项中的项目是 a并且字典是 a ,try catch
所以我收到错误消息。str
dict
举个例子,注意嵌套键的可能性。否则我的方法会简单得多:
records = [{
"id": 2017215,
"name": "foo bar"
"campaign": {
"id": 161,
"name": "Historical Data Campaign"
}
},
{
"id": 2017215,
"name": "foo bar",
"last_updated": "2018-01-01",
"campaign": {
"id": 161,
"name": "Historical Data Campaign"
}
}]
keys = [ ['id'], ['name'], ['campaign'], ['campaign']['id'], ['campaign']['name'], ['last_updated'] ]
for record in records:
for key in keys:
print (record + key) # assumption was this would generate "record['id']" but errors due to mismatched types.
我是否让这比需要的更难?最大的问题是键可以从记录更改为记录,并且在某些情况下,数据中存在嵌套键。
解决方案
首先,如果您按照以下方式进行操作,则可以使上述代码段工作
records = # ...
keys = [ ('id',), ('name',), ('campaign',), ('campaign', 'id'), ('campaign', 'name'), ('last_updated',) ]
for record in records:
for key_tuple in keys:
obj = record
for key in key_tuple:
obj = record[key]
print(obj)
您的代码段中的一个问题是出现['campaign']['id']
. Python假设该['campaign']
部分是一个文字列表定义,然后['id']
是索引该列表(但不能因为它不是整数)。
更一般地说,我建议研究.items()
字典的方法。你可以把上面的片段变成
for record in records:
for key, value in record.items():
# to handle nested dictionaries
if isinstance(value, dict):
for subkey, subval in value.items():
print(subkey, subval)
else:
print(key, val)
这将处理任何键,但如果您有比两层更深的嵌套字典,您可能希望将其重新实现为递归函数。