如何分割字符串行以创建嵌套列表?

2024-10-04 03:20:03 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在文本文件中拆分这些字符串行并创建嵌套列表或字典?公司名称:

Ali/22/Bankacı
Ahmet/28/Kasap
Mehmet/31/Bakkal

这样您就有了一个包含以下值的列表:

^{pr2}$

哪种是最具Python式的方法?在


Tags: 方法字符串名称列表字典公司ali文本文件
2条回答

一种方法是:

FILE = 'file.txt'

result = {}
with open(FILE, encoding='utf-8') as my_file:
    for line in my_file:
        line = line.strip().split('/')
        result[line[0]] = line[1:]

print(result['Ali'][1])

或者,巧妙地放在函数中:

^{pr2}$

我在上面做的是:

  • 逐行读取一个文件(我从中删除末尾的\n
  • 对于每一行,我通过拆分/字符后的字符串来创建一个列表(此时,一行如下:['Ali', '22', 'Bankacı']
  • 将列表中的第一个元素用作键,将列表的其余元素用作值

如果两个(或多个)列表中的第一个元素相同(您将始终获得最后一个元素的值),则无法获得正确的结果


如果您还想解决重复密钥问题,另一种方法可能如下所示:

def data_to_dict(file_path):
    """
    Some docstring here which tells the user what the function does
    """

    result = {}
    with open(file_path, encoding='utf-8') as my_file:
        for i, line in enumerate(my_file):
            line = line.strip().split('/')
            key, val = line[0], line[1:]

            if key not in result:
                result[key] = val
            else:
                new_key = '{}_{}'.format(key, i)
                result[new_key] = val
    return result


if __name__ == '__main__':
    d = data_to_dict('file.txt')
    print(d)
    print(d['Ali'][1])

对于此文件:

Ali/22/Bankacı
Ali/28/Kasap
Mehmet/31/Bakkal

输出如下所示:

>> {'Ali': ['22', 'Bankacı'], 'Ali_1': ['28', 'Kasap'], 'Mehmet': ['31', 'Bakkal']}
>> Bankacı

通常情况下,我不会不加尝试地回答问题,但这可以用一行dictionary-comprehension轻松完成:

{l[:l.index('/')]:l.split('/')[1:] for l in open('f.txt').read().split('\n')[:-1]}

然后允许以以下格式访问:

^{pr2}$

或者,您可以使用另一个comprehension创建2d list

[l.split('/') for l in open('f.txt').read().split('\n')[:-1]]

它给出了:

[['Ali', '22', 'Bankacı'], ['Ahmet', '28', 'Kasap'], ['Mehmet', '31', 'Bakkal']]

相关问题 更多 >