要列表到字典的字符串

2024-09-28 20:46:55 发布

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

我有以下问题,我正在尝试将df中的字符串转换为列表,以便以后可以将它们构造为dict。请参见下面的内容:

我的数据是以字符串的形式输入的

df['users'].iloc[0] = "str1|str2, str3|str4"

。。。。。等等。你知道吗

从这里开始,我将字符串拆分为:

df['users'] = df['users'].map(lambda x: re.split("[',|']",x)),返回一个列表[str1, str2, str3, str4]。你知道吗

到目前为止还不错。我还没能解决的难题是,将上述列表作为一个字典进行组织,这样我就可以产生以下内容:

[{ field1: str1 field2: str2 field3: field4: },{ field1: str3 field2: str4 field3: field4: }]

其中空字段可以稍后填写(可选)。你知道吗

有没有更好的方法来组织数据以使这个目标更容易实现?i、 e.将列表设为[[str1, str2],[str3, str4]]

我如何用字段的名称(field1,filed2,…)从这个列表中“压缩”这些值?你知道吗

本质上,最终输出应该在df的每个单元格中包含上面的字典,其中原始字符串用于驻留。你知道吗

有人能提供见解吗?谢谢。你知道吗


Tags: 数据字符串df列表字典usersdictfield2
2条回答

列表列表

df.users.map(
    lambda s: [x.split('|') for x in s.split(', ')]
)

0    [[str1, str2], [str3, str4]]
Name: users, dtype: object

使用f字符串的词典

df.users.map(
    lambda s: [
        {f'field{i}': v for i, v in enumerate(x.split('|'), 1)}
        for x in s.split(', ')
    ]
)

0    [{'field1': 'str1', 'field2': 'str2'}, {'field...
Name: users, dtype: object

具有预先确定的字段

fields = 'field1 field2 field3 field4'.split()

df.users.map(
    lambda s: [dict(zip(fields, x.split('|'))) for x in s.split(', ')]
)

0    [{'field1': 'str1', 'field2': 'str2'}, {'field...
Name: users, dtype: object

如果你想要所有字段

from itertools import zip_longest

fields = 'field1 field2 field3 field4'.split()

df.users.map(
    lambda s: [dict(zip_longest(fields, x.split('|'))) for x in s.split(', ')]
)

这样做可能会有所帮助(假设始终有四个字段):

import itertools
import pprint

FIELDS = [
    'field1',
    'field2',
    'field3',
    'field4',
]

test_str = "str1|str2, str3|str4"
items = test_str.split(',')
results = [
    # Pads non-existent fields with `None`.
    dict(itertools.zip_longest(FIELDS, item.split('|')))
    for item in items
]

pprint.pprint(results)
# Returns:
# [{'field1': 'str1', 'field2': 'str2', 'field3': None, 'field4': None},
#  {'field1': ' str3', 'field2': 'str4', 'field3': None, 'field4': None}]

相关问题 更多 >