所以我有一本充满名字的字典
我可以对键进行排序,但不确定如何合并值,我需要按以下格式更改值,但无法这样做,名称按键和值的姓氏排序
names = {john doe : ['jon doe' , 'j don']
jonh don : ['latte late'] }
names = {doe: ['john', 'jon']
don: ['jonh', 'j']
late: ['latte']
答案 0 :(得分:0)
您应该将键和值分别转换为新字典中的新元素。
我假设每个键都是字符串-因此您可以将其分为两部分
parts = key.rsplit(' ', 1)
并在新字典中将零件用作关键和价值
new_key = parts[-1]
new_value = parts[0]
new_names[new_key].append(new_value)
使用值的相同方法。但是因为每个值都是一个列表,所以它需要for
循环才能单独使用列表中的每个元素。
我使用collections.defaultdict
,因此不需要检查键是否存在或是否为所有值分配列表。最后,我可以将其转换为普通词典。
import collections
names = {
"john doe": ['jon doe' , 'j don'],
"jonh don": ['latte late'],
}
new_names = collections.defaultdict(list)
for item in names.keys():
parts = item.rsplit(' ', 1)
new_key = parts[-1]
new_value = parts[0]
new_names[new_key].append(new_value)
for value in names.values():
for item in value:
parts = item.rsplit(' ', 1)
new_key = parts[-1]
new_value = parts[0]
new_names[new_key].append(new_value)
#for key, value in new_names.items():
# print(key, value)
names = dict(new_names)
print(names)
结果:
{'doe': ['john', 'jon'], 'don': ['jonh', 'j'], 'late': ['latte']}