Python: 如何根据特定键值仅打印字典中的实际值?
Python: How to print only the actual value from a dictionary based on a specific key value?
我有一本字典,它是根据 Splunk 搜索的结果动态生成的。字典的内容是这样的:
SiteID Reporting Total
FLNGAASF1 3 9
MSNGAASF2 14 26
PANGAASF1 31 40
这是我的 Python 生成字典的代码:
SiteIDs = defaultdict(list)
SiteIDs.clear()
此处为 Splunk 搜索
for result in results.ResultsReader(jobC.results(segmentation='none')):
SiteID=result["SiteID"]
Reporting=result["Reporting"]
Total=result["Total"]
SiteIDs[SiteID].append(('Reporting',Reporting))
SiteIDs[SiteID].append(('Total',Total))
现在我需要做的是获取特定 SiteID 的报告和总数。例如,假设我想要 MSNGAASF2 的报告和总数,以便我可以在 HTML table 中将它们打印为:
14 / 26
或者像这样
SiteID Clients
FLNGAASF1 0/9
MSNGAASF2 14/26
PANGAASF1 0/40
所以我像这样打破我的字典条目:
Client=(SiteIDs['MSNGAASF2'])
这样做:
print Client,"<br />"
结果:
[('Reporting', '14'), ('Total', '26')]
如果我尝试替换函数,我收到一个错误,替换不是列表对象中受支持的属性。无论我尝试什么,我都会收到一条错误消息,指出该属性不受支持。
我试过这样的事情,但绝对没有成功。
print Client.get('MSNGAASF2ULLSA',0)," / ",Client.get('MSNGAASF2ULLSA',1)
得到这个:
print Client.get('MSNGAASF2',0)," / ",Client.get('MSNGAASF2',1) AttributeError: 'list' 对象没有属性'get'
我只想打印所选 SiteID 的值,并且只打印这些值。这并没有那么难,但作为菜鸟 python 开发人员,我似乎无法弄明白。
我需要执行此操作,因为我有第二个 Splunk 搜索,其中列出了所有 SiteID,并且我需要每个站点的特定计数。循环遍历第一个 Splunk 搜索结果需要很长时间。我希望使用字典会快得多。
您正在附加两个单独的元组;用新字典替换这两个元组:
for result in results.ResultsReader(jobC.results(segmentation='none')):
site_id = result["SiteID"]
reporting = result["Reporting"]
total = result["Total"]
SiteIDs[site_id].append({'Reporting': reporting, 'Total': total})
您甚至可以只附加整个 result
字典,而不是提取两个键。
然后您可以在代码中引用这些键; SiteIDs
中的每个值都是一个列表,因此您将遍历该列表以获取每个单独的字典:
results = SiteIDs['MSNGAASF2']
for result in results:
print '<td> {Reporting} </td><td> {Total} </td>'.format(**result)
我这里用了一个str.format()
template;这允许您使用模板中 result
中的键将特定值提取到字符串中。
现在,如果您在 Splunk 结果集中的 SiteID
值始终是唯一的,那么使用 defaultdict(list)
就太过分了;您可以只使用常规字典,然后将每个 SiteID
的结果字典存储在其中:
for result in results.ResultsReader(jobC.results(segmentation='none')):
SiteIDs[result["SiteID"]] = result
然后放弃每个 id 的循环:
result = SiteIDs['MSNGAASF2']
print '<td> {Reporting} </td><td> {Total} </td>'.format(**result)
默认字典是一个列表字典。如果你想要一本真正的字典,你应该像这样构建它:
mydict = {'FLNGAASF1': {'Reporting': 3, 'Total': 9}}
你也可以去:
mydict['FLNGAASF1'] = {'Reporting': 3, 'Total': 9}
然后检索数据:
print(mydict['FLNGAASF1'])
>>> {'Reporting': 3, 'Total': 9}
完整示例(假设您的 splunk 搜索结果是可迭代的):
mydict = {}
for row in splunk:
mydict[row['SiteID']] = {'Reporting': row['Reporting'], 'Total': row['Total']
然后打印你的值:
for k, v in mydict.items():
print("Client: %s: %d/%d" % (k, v['Reporting'], v['Total']))
>>>Client: FLNGAASF1: 3/9
>>>Client: MSNGAASF2: 14/26
我有一本字典,它是根据 Splunk 搜索的结果动态生成的。字典的内容是这样的:
SiteID Reporting Total
FLNGAASF1 3 9
MSNGAASF2 14 26
PANGAASF1 31 40
这是我的 Python 生成字典的代码:
SiteIDs = defaultdict(list)
SiteIDs.clear()
此处为 Splunk 搜索
for result in results.ResultsReader(jobC.results(segmentation='none')):
SiteID=result["SiteID"]
Reporting=result["Reporting"]
Total=result["Total"]
SiteIDs[SiteID].append(('Reporting',Reporting))
SiteIDs[SiteID].append(('Total',Total))
现在我需要做的是获取特定 SiteID 的报告和总数。例如,假设我想要 MSNGAASF2 的报告和总数,以便我可以在 HTML table 中将它们打印为:
14 / 26
或者像这样
SiteID Clients
FLNGAASF1 0/9
MSNGAASF2 14/26
PANGAASF1 0/40
所以我像这样打破我的字典条目:
Client=(SiteIDs['MSNGAASF2'])
这样做:
print Client,"<br />"
结果:
[('Reporting', '14'), ('Total', '26')]
如果我尝试替换函数,我收到一个错误,替换不是列表对象中受支持的属性。无论我尝试什么,我都会收到一条错误消息,指出该属性不受支持。
我试过这样的事情,但绝对没有成功。
print Client.get('MSNGAASF2ULLSA',0)," / ",Client.get('MSNGAASF2ULLSA',1)
得到这个:
print Client.get('MSNGAASF2',0)," / ",Client.get('MSNGAASF2',1) AttributeError: 'list' 对象没有属性'get'
我只想打印所选 SiteID 的值,并且只打印这些值。这并没有那么难,但作为菜鸟 python 开发人员,我似乎无法弄明白。
我需要执行此操作,因为我有第二个 Splunk 搜索,其中列出了所有 SiteID,并且我需要每个站点的特定计数。循环遍历第一个 Splunk 搜索结果需要很长时间。我希望使用字典会快得多。
您正在附加两个单独的元组;用新字典替换这两个元组:
for result in results.ResultsReader(jobC.results(segmentation='none')):
site_id = result["SiteID"]
reporting = result["Reporting"]
total = result["Total"]
SiteIDs[site_id].append({'Reporting': reporting, 'Total': total})
您甚至可以只附加整个 result
字典,而不是提取两个键。
然后您可以在代码中引用这些键; SiteIDs
中的每个值都是一个列表,因此您将遍历该列表以获取每个单独的字典:
results = SiteIDs['MSNGAASF2']
for result in results:
print '<td> {Reporting} </td><td> {Total} </td>'.format(**result)
我这里用了一个str.format()
template;这允许您使用模板中 result
中的键将特定值提取到字符串中。
现在,如果您在 Splunk 结果集中的 SiteID
值始终是唯一的,那么使用 defaultdict(list)
就太过分了;您可以只使用常规字典,然后将每个 SiteID
的结果字典存储在其中:
for result in results.ResultsReader(jobC.results(segmentation='none')):
SiteIDs[result["SiteID"]] = result
然后放弃每个 id 的循环:
result = SiteIDs['MSNGAASF2']
print '<td> {Reporting} </td><td> {Total} </td>'.format(**result)
默认字典是一个列表字典。如果你想要一本真正的字典,你应该像这样构建它:
mydict = {'FLNGAASF1': {'Reporting': 3, 'Total': 9}}
你也可以去:
mydict['FLNGAASF1'] = {'Reporting': 3, 'Total': 9}
然后检索数据:
print(mydict['FLNGAASF1'])
>>> {'Reporting': 3, 'Total': 9}
完整示例(假设您的 splunk 搜索结果是可迭代的):
mydict = {}
for row in splunk:
mydict[row['SiteID']] = {'Reporting': row['Reporting'], 'Total': row['Total']
然后打印你的值:
for k, v in mydict.items():
print("Client: %s: %d/%d" % (k, v['Reporting'], v['Total']))
>>>Client: FLNGAASF1: 3/9
>>>Client: MSNGAASF2: 14/26