用Python搜索复杂的数据结构
我对Python比较陌生,所以我一直在自学。 我需要编写一个脚本来解析JSON输出,如下所示:用Python搜索复杂的数据结构,python,json,Python,Json,我对Python比较陌生,所以我一直在自学。 我需要编写一个脚本来解析JSON输出,如下所示: [{u'serverId': 117, u'hostName': u'bla', u'ipAddress': u'10.0.0.1', u'id': 163}, {u'serverId': 221, u'hostName': u'bla2', u'ipAddress': u'10.0.0.1', u'id': 380}, {u'serverId': 213, u'hostName': u'bla2',
[{u'serverId': 117, u'hostName': u'bla', u'ipAddress': u'10.0.0.1', u'id': 163},
{u'serverId': 221, u'hostName': u'bla2', u'ipAddress': u'10.0.0.1', u'id': 380},
{u'serverId': 213, u'hostName': u'bla2', u'ipAddress': u'10.0.0.3', u'id': 658}]
等等,等等
我有一个主要的数据源,我通过迭代来获取主机名。
服务器id需要上面的辅助源
如何使用第一个数据源中的主机名来获取相应的id
提前谢谢 类似这样:
my_list = []
# Read in json file
with open('file.json') as in_file:
my_list = json.load(in_file)
for row in my_list: # Loop through the array
if isinstance(row, dict): # Check we are dealing with a dictionary
if row.get('hostName', '') == 'bla': # compare values
print(row.get('id', None)) # Do something
每当您需要在您的案例中使用一个键时,在您的案例中查找另一段数据的主机名,服务器ID,通常Python中最合适的数据结构是字典。在这种情况下,您需要从JSON数据构建一个字典,如下所示:
server_id_mapping = {}
for server_info in json.loads(data_source_2):
server_id_mapping[server_info['hostName']] = server_info['serverId']
然后,要从主机名获取服务器ID,只需使用:
server_id = server_id_mapping[hostname]
您可以使用“过滤器”将其作为一个衬里来执行: 这将以字典形式返回空列表或数据元素列表,其中主机名键等于主机名。然后,您可以按如下方式使用它:
entries = filter(
lambda d: d['hostName'] == hostName,
json.loads(data)
)
if not entries:
raise KeyError('There is no entry with that host name.')
id = entries[0]['id']
这看起来像Python,而不是JSON。谢谢!这似乎奏效了。我喜欢这一行的优雅:
entries = filter(
lambda d: d['hostName'] == hostName,
json.loads(data)
)
if not entries:
raise KeyError('There is no entry with that host name.')
id = entries[0]['id']