根据Python中的空间拆分单个词典键和值

时间:2018-08-15 22:14:33

标签: python dictionary split

我对Python还是很陌生,不确定从哪里开始,所以请原谅错误的指导。

说我有字典:

Dict = {'Name': 'Dr. John Smith'}

如何将其拆分以创建:

Dict = {'Title': 'Dr.'
        'First': 'John'
        'Last': 'Smith'}

3 个答案:

答案 0 :(得分:4)

首先,请确保您不要遮盖内置的类名。在这里,您使用的是大写字母D,但是它的大小足以让人混淆。

有多种方法可以解决此问题,但是每种方法都涉及在输入字典中拆分字符串值。

您可以提取唯一的值,通过str.split对其进行拆分,然后使用dict + zip来将键列表与值链接起来:

d = {'Name': 'Dr. John Smith'}
L = ['Title', 'First', 'Last']

split = next(iter(d.values())).split()
res = dict(zip(L, split))

print(res)

{'Title': 'Dr.', 'First': 'John', 'Last': 'Smith'}

还有其他方法,例如通过在{}构造函数中显式定义字典键,或通过字典理解。上述解决方案是通用的,可最大程度地减少重复引用。

答案 1 :(得分:3)

假设您想要一个以上的人这样做,则可以将每个人像Dicts这样的字典存储在列表中。此功能应按空格进行拆分,并且还可以在某人没有标题(即只有名字和姓氏)的情况下使用。

def split_names(dict_list):
    l = []
    for dict_i in dict_list:
        new_list = list(dict_i.values())[0].split()
        if len(new_list) == 2:
            l.append(
                {'First': new_list[0],
                 'Last': new_list[1]}
            )
        else:
            l.append(
                {'Title': new_list[0],
                 'First': new_list[1],
                 'Last': new_list[2]}
            )

    return l

然后

Dicts = {'Name': 'Dr. John Smith'}
split_names(Dicts)

[{'Title': 'Dr.', 'First': 'John', 'Last': 'Smith'}]

或更笼统地说:

Dicts = [{'Name': 'Dr. John Smith'}, {'Name': 'Mr. Mike Jones'}, {'Name': 'John Doe'}]
split_names(Dicts)

[{'Title': 'Dr.', 'First': 'John', 'Last': 'Smith'},
 {'Title': 'Mr.', 'First': 'Mike', 'Last': 'Jones'},
 {'First': 'John', 'Last': 'Doe'}]

答案 2 :(得分:2)

这是关于分割字符串,而不是字典键本身。键的值是字符串类型。因此,可以使用str.split()

title, first, last = Dict['Name'].split()
new_dict = {"Title": title, "First": first, "Last": last}

但是如果您不能将它分为三部分,则会遇到麻烦,那么您必须更深入地编写自己的函数,该函数还可以处理文本中的或多或少的空格(另请参阅最后的更新)。

但这应作为要求的起点。也可能是有趣的str.partition()或使用regex

更新

如果您具有3个名称部分或2个甚至1个名称部分,而没有标题或标题和名字的麻烦而没有麻烦,这是一种解决方案:

zip()-like built-in function filling unequal lengths from left with None value

这不是所有名称变体(额外的名称部分,其他排列等)的最终解决方案,如果没有误报,这将很难解决。