python – 迭代嵌套列表和字典
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 迭代嵌套列表和字典,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1785字,纯文字阅读大概需要3分钟。
内容图文
![python – 迭代嵌套列表和字典](/upload/InfoBanner/zyjiaocheng/777/5436127213e04b3b97e51d5a79a1ef9f.jpg)
我需要遍历嵌套列表和字典,并通过十六进制字符串替换每个整数.例如,这样的元素可能如下所示:
element = {'Request': [16, 2], 'Params': ['Typetext', [16, 2], 2], 'Service': 'Servicetext', 'Responses': [{'State': 'Positive', 'PDU': [80, 2, 0]}, {}]}
应用该函数后,它应如下所示:
element = {'Request': ['0x10', '0x02'], 'Params': ['Typetext', ['0x10', '0x02'], '0x02'], 'Service': 'Servicetext', 'Responses': [{'State': 'Positive', 'PDU': ['0x50', '0x02', '0x00']}, {}]}
我已经找到了一个函数,迭代这些嵌套的iterables http://code.activestate.com/recipes/577982-recursively-walk-python-objects/.改编成python 2.5这个函数看起来像这样:
string_types = (str, unicode)
iteritems = lambda mapping: getattr(mapping, 'iteritems', mapping.items)()
def objwalk(obj, path=(), memo=None):
if memo is None:
memo = set()
iterator = None
if isinstance(obj, dict):
iterator = iteritems
elif isinstance(obj, (list, set)) and not isinstance(obj, string_types):
iterator = enumerate
if iterator:
if id(obj) not in memo:
memo.add(id(obj))
for path_component, value in iterator(obj):
for result in objwalk(value, path + (path_component,), memo):
yield result
memo.remove(id(obj))
else:
yield path, obj
但是这个函数的问题是,它返回元组元素.那些不能编辑.
你能帮我实现我需要的功能吗?
最好的祝福
wewa
解决方法:
该函数不仅返回元组元素;它返回嵌套结构中任何项的路径,加上它的值.您可以使用该路径获取值并进行更改:
for path, value in objwalk(element):
if isinstance(value, int):
parent = element
for step in path[:-1]:
parent = parent[step]
parent[path[-1]] = hex(value)
因此,对于每个整数值,使用路径查找该值的父级,然后将当前值替换为十六进制等效值.
您从上述方法获得的输出:
>>> element
{'Params': ['Typetext', ['0x10', '0x2'], '0x2'], 'Request': ['0x10', '0x2'], 'Responses': [{'State': 'Positive', 'PDU': ['0x50', '0x2', '0x0']}, {}], 'Service': 'Servicetext'}
内容总结
以上是互联网集市为您收集整理的python – 迭代嵌套列表和字典全部内容,希望文章能够帮你解决python – 迭代嵌套列表和字典所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。