You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:处理类JSON字典数据拆分元素时遇AttributeError求助

解决字典处理中的AttributeError问题

嘿,我来帮你搞定这个问题!首先咱们先拆解一下你遇到的错误:

你代码里的liftOver.split("[_]")是直接对整个字典对象调用split()方法,但split()是字符串才有的方法,字典根本没有这个属性,所以才会抛出AttributeError: 'dict' object has no attribute 'split'。而且你的循环逻辑也有点绕——明明已经用for key, value in liftOver.iteritems()遍历字典了,结果又在循环里重新遍历liftOver.values(),完全没用到当前循环的键值对,这就白做了外层循环的工作。

正确的解决方案思路

我们需要:

  1. 遍历字典的每个Contig键和对应的ref列表
  2. 从每个ref列表中取出第一个条目里的ref字符串(也就是每个子列表的第0个元素)
  3. 对这个字符串用下划线_拆分

完整代码实现

liftOver = {"/ Contig1863": [["ref0000283e3", "-", 3681], ["ref0000283e3_ref0000283e5", "-", 7468]], "/ Contig1862": [["ref0001167e3_ref0001167e5", "-", 13438]], "/ Contig1861": [["ref0001923e3_ref0001923e5", "-", 13221]], "/ Contig1860": [["ref0000920e3", "+", 769], ["ref0000920e3_ref0000920e5", "-", 6640]], "/ Contig1867": [["ref0001036e3_ref0001036e5", "-", 14133]], "/ Contig1866": [["ref0000256e3_ref0000256e5", "+", 11744]], "/ Contig1865": [["ref0001172e3_ref0001172e5", "+", 8445]], "/ Contig1864": [["ref0000694e3_ref0000694e5", "-", 26308]], "/ Contig1869": [["ref0001325e5", "-", 396], ["ref0001325e3_ref0001325e5", "+", 17739]], "/ Contig1868": [["ref0001621e5", "+", 3742], ["ref0001621e3_ref0001621e5", "+", 14315]]}

# 遍历每个Contig的键值对(Python3用items(),Python2可以用iteritems())
for contig_name, ref_entries in liftOver.items():
    # 取出第一个ref条目中的ref字符串
    first_ref_str = ref_entries[0][0]
    # 按下划线拆分字符串
    split_ref = first_ref_str.split('_')
    # 打印结果,也可以根据需求存入新字典
    print(f"Contig: {contig_name}, 拆分后的ref: {split_ref}")

代码解释

  • liftOver.items():遍历字典的键(Contig名称)和对应的值(ref条目列表),Python 3里用这个方法就行,Python 2可以换成iteritems()。
  • ref_entries[0][0]:先取当前Contig对应的第一个ref条目(ref_entries[0]),再取这个条目里的第一个元素——也就是我们需要的ref字符串。
  • first_ref_str.split('_'):对拿到的ref字符串调用split()方法,按下划线拆分得到子字符串列表。

进阶:将结果存入新字典

如果你想把结果整理成一个新字典(键是Contig名称,值是拆分后的ref列表),可以这样写:

result_dict = {}
for contig_name, ref_entries in liftOver.items():
    first_ref_str = ref_entries[0][0]
    result_dict[contig_name] = first_ref_str.split('_')

# 打印最终结果字典
print(result_dict)

这样就能完美实现你想要的功能啦!

内容的提问来源于stack exchange,提问作者User192

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:37:40