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

如何用Python将含名称与数字的文本文件转换为列表字典?

用Python处理这种格式文本的方案

嘿,这个需求很常见,我来给你分享几个实用的实现思路和代码示例!

核心思路

我们要做的就是把文件内容拆分成一个个元素,然后区分出名称(字典键)和数字(对应键的列表值):

  • 遇到非数字的元素,就把它当作新的字典键
  • 后续的数字元素都归到这个键对应的列表里,直到遇到下一个非数字元素

基础实现版本

这个版本逻辑清晰,适合新手理解:

# 读取文件内容
with open('your_file.txt', 'r') as file:
    content = file.read().strip()

# 将内容拆分成一个个独立的元素(默认按空格分割)
tokens = content.split()

result_dict = {}
current_key = None

for token in tokens:
    # 尝试将当前元素转为数字(兼容整数和浮点数)
    try:
        num = float(token)
        # 如果是整数,转成int类型(可选,根据需求调整)
        if num.is_integer():
            num = int(num)
        # 如果已经有当前键,就把数字加到对应列表里
        if current_key is not None:
            result_dict[current_key].append(num)
    except ValueError:
        # 转数字失败,说明是新的名称,更新当前键并初始化列表
        current_key = token
        result_dict[current_key] = []

# 打印结果看看
print(result_dict)

更优雅的迭代器版本

用迭代器可以避免维护current_key变量,逻辑更紧凑:

with open('your_file.txt', 'r') as file:
    content = file.read().strip()

# 把元素转成迭代器,方便逐个获取
tokens = iter(content.split())
result_dict = {}

while True:
    try:
        # 获取下一个名称作为键
        key = next(tokens)
        nums = []
        # 持续收集后续的数字,直到遇到下一个非数字元素
        while True:
            try:
                num_token = next(tokens)
                num = float(num_token)
                if num.is_integer():
                    num = int(num)
                nums.append(num)
            except ValueError:
                # 把这个非数字元素放回迭代器,供下一轮循环处理
                tokens = iter([num_token] + list(tokens))
                break
        result_dict[key] = nums
    except StopIteration:
        # 迭代器耗尽,结束循环
        break

print(result_dict)

注意事项

  • 如果你的名称可能包含数字(比如alice123),上面的代码依然有效,因为只要转数字失败就会被当作名称
  • 如果存在纯数字的名称(比如123作为名称),这时候代码会把它当作键,后面的数字作为值。如果这不符合你的预期,需要额外加判断规则(比如用正则匹配名称的格式:import re,然后判断if re.match(r'^[a-zA-Z]+$', token)来确认是纯字母名称)
  • 如果文件开头就是数字,这些数字会被忽略,因为此时还没有对应的键

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:44:58