我对Python还是很陌生,不确定从哪里开始,所以请原谅错误的指导。
说我有字典:
Dict = {'Name': 'Dr. John Smith'}
如何将其拆分以创建:
Dict = {'Title': 'Dr.'
'First': 'John'
'Last': 'Smith'}
答案 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
这不是所有名称变体(额外的名称部分,其他排列等)的最终解决方案,如果没有误报,这将很难解决。