【发布时间】:2019-09-07 07:58:43
【问题描述】:
在这个 for 循环中:
for i in range(len(data_df)):
for j in range(len(data_df.iloc[i].incident_updates)):
print(data_df.iloc[i].incident_updates[j].get("affected_components"))
我得到这样的回应:
[{u'old_status': u'operational', u'code': u'rwdp37x0698r', u'name': u'AA', u'new_status': u'operational'}]
[{u'old_status': u'partial_outage', u'code': u'rwdp37x0698r', u'name': u'AA', u'new_status': u'operational'}]
[{u'old_status': u'operational', u'code': u'rwdp37x0698r', u'name': u'AA', u'new_status': u'partial_outage'}]
[{u'old_status': u'partial_outage', u'code': u'31tyncvy5ng7', u'name': u'AB', u'new_status': u'operational'}]
[{u'old_status': u'operational', u'code': u'31tyncvy5ng7', u'name': u'AB', u'new_status': u'partial_outage'}]
None
None
[{u'old_status': u'partial_outage', u'code': u'xvgbw19sgbrj', u'name': u'AC', u'new_status': u'operational'}, {u'old_status': u'partial_outage', u'code': u'31tyncvy5ng7', u'name': u'AC', u'new_status': u'operational'}, {u'old_status': u'partial_outage', u'code': u'zg1gfkycdf6p', u'name': u'AC', u'new_status': u'operational'}, {u'old_status': u'partial_outage', u'code': u'rwdp37x0698r', u'name': u'AA', u'new_status': u'operational'}, {u'old_status': u'partial_outage', u'code': u'lvj41y83ghdg', u'name': u'AD', u'new_status': u'operational'}, {u'old_status': u'partial_outage', u'code': u'2qdjrpnyn4mb', u'name': u'AB', u'new_status': u'operational'}, {u'old_status': u'partial_outage', u'code': u'24zyv2d3p2jf', u'name': u'AC', u'new_status': u'operational'}]
None
[{u'old_status': u'operational', u'code': u'31tyncvy5ng7', u'name': u'AA', u'new_status': u'major_outage'}]
None
None
...
因此,如果您注意到,有一些无。我知道那里没有任何价值,所以我想将它转换为一个看起来像这样[{'None':'None'}] 的字典列表 - 这样它看起来就像该输出响应中的其他列表 - 所以我可以将它保存到另一个列表,因此我可以从中获取name(使用list[i][j].dict.get())。我相信你明白了。
问题来了: 我能够将这个 for 循环的输出转换为字典列表列表(使用 list.append() 函数),并将 None 转换为字符串 'NONE',使用
affected_components_variable = ["NONE" if val is None else val for val in affected_components_variable]
affected_components_variable 是包含上述 for 循环输出的列表。它看起来像这样:
[[{u'old_status': u'operational', u'code': u'rwdp37x0698r', u'name': u'AA', u'new_status': u'operational'}]
[{u'old_status': u'partial_outage', u'code': u'rwdp37x0698r', u'name': u'AA', u'new_status': u'operational'}]
[{u'old_status': u'operational', u'code': u'rwdp37x0698r', u'name': u'AA', u'new_status': u'partial_outage'}]
...
'NONE'
...
这不符合我的目的,因为当我执行list[i][j].dict.get() 时,当它到达“NONE”时,它会抛出一个错误,显示为AttributeError: 'str' object has no attribute 'get' - 原因很明显。
为了避免这一切,我可以这样做:
for i in range(len(data_df)):
for j in range(len(data_df.iloc[i].incident_updates)):
for k in range(len(data_df.iloc[i].incident_updates[j].get("affected_components"))):
print(data_df.iloc[i].incident_updates[j].get("affected_components")[k].get("name"))
由于同样明显的原因,这会引发同样的错误。
所以,我认为我需要这样做:[{'None':'None'}] 在列表级别,所以当我这样做 list[i][j].dict.get() 时,我会得到正确的响应。
非常感谢任何帮助。
【问题讨论】:
标签: python-2.7 list dictionary