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

Python 如何拆分字符串行以创建嵌套列表?,python,string,list,dictionary,Python,String,List,Dictionary,如何在文本文件中拆分这些字符串行并创建嵌套列表或字典 Ali/22/Bankacı Ahmet/28/Kasap Mehmet/31/Bakkal 这样您就有了一个包含如下值的列表: my_data['Ali'][1]= 'Bankacı' 哪一种方法是最具python风格的?通常我不会不假思索地回答一个问题,但这可以通过一行字典理解轻松做到: {l[:l.index('/')]:l.split('/')[1:] for l in open('f.txt').read().split('\n

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

Ali/22/Bankacı
Ahmet/28/Kasap
Mehmet/31/Bakkal
这样您就有了一个包含如下值的列表:

my_data['Ali'][1]= 'Bankacı'

哪一种方法是最具python风格的?

通常我不会不假思索地回答一个问题,但这可以通过一行
字典理解轻松做到:

{l[:l.index('/')]:l.split('/')[1:] for l in open('f.txt').read().split('\n')[:-1]}
[l.split('/') for l in open('f.txt').read().split('\n')[:-1]]
然后允许以以下格式访问:

>>> d['Mehmet'][1]
'Bakkal'

或者,您可以使用另一个
理解创建
2d列表

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

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

通常情况下,我不会不假思索地回答一个问题,但这可以通过一行
字典理解来轻松完成:

{l[:l.index('/')]:l.split('/')[1:] for l in open('f.txt').read().split('\n')[:-1]}
[l.split('/') for l in open('f.txt').read().split('\n')[:-1]]
然后允许以以下格式访问:

>>> d['Mehmet'][1]
'Bakkal'

或者,您可以使用另一个
理解创建
2d列表

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

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

一种方法是:

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])
或者,很好地放在函数中:

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 line in my_file:
            line = line.strip().split('/')
            result[line[0]] = line[1:]
    return result


if __name__ == '__main__':
    d = data_to_dict('file.txt')
    print(d['Ali'][1])
我在上面所做的是:

  • 逐行读取文件(从中删除结尾处的
    \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_1': ['28', 'Kasap'], 'Mehmet': ['31', 'Bakkal']}
>> 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_1': ['28', 'Kasap'], 'Mehmet': ['31', 'Bakkal']}
>> Bankacı

一种方法是:

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])
或者,很好地放在函数中:

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 line in my_file:
            line = line.strip().split('/')
            result[line[0]] = line[1:]
    return result


if __name__ == '__main__':
    d = data_to_dict('file.txt')
    print(d['Ali'][1])
我在上面所做的是:

  • 逐行读取文件(从中删除结尾处的
    \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_1': ['28', 'Kasap'], 'Mehmet': ['31', 'Bakkal']}
>> 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_1': ['28', 'Kasap'], 'Mehmet': ['31', 'Bakkal']}
>> Bankacı

看起来你想让我们为你写些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、回溯等)。你提供的细节越多,你可能得到的答案就越多。检查和。这样其他人就可以问这样的问题,但我不能?“我只是在寻找最具蟒蛇风格的方式”
“6年前,3个月前问过”
。如果有人偷东西,但没有被抓到,这是否意味着你可以偷?我所要求的是展示你的努力,它会越来越快地吸引答案。。。这并不难。@JoeIddon这基本上就是a,但是如果你希望你能深入了解meta的帖子,比如:或者meta中有很多关于这个主题的帖子,请四处搜索。哦,你可以看到这里应该问什么类型的问题:这个问题目前不适合哪个…@moonigrawr谢谢,那些链接真的很有用。看起来你想让我们为你写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、回溯等)。你提供的细节越多,你可能得到的答案就越多。检查和。这样其他人就可以问这样的问题,但我不能?“我只是在寻找最具蟒蛇风格的方式”
“6年前,3个月前问过”
。如果有人偷东西,但没有被抓到,这是否意味着你可以偷?我所要求的是展示你的努力,它会越来越快地吸引答案。。。这并不难。@JoeIddon这基本上就是a,但是如果你希望你能深入了解meta的帖子,比如:或者meta中有很多关于这个主题的帖子,请四处搜索。哦,你可以看到这里应该问什么类型的问题:这个问题目前不适合哪个…@moonigrawr谢谢,那些链接真的很有用。