基本上,我正在尝试这样做: 与人一起返回“姓氏到名字”词典 从“人到朋友”字典person_to_friends。 而且我无法从重复中得到名字
>>>def get_last_to_first(
...person_to_friends: Dict[str, List[str]]) -> Dict[str, List[str]]
... get_last_to_first(P2F) == {
... 'Katsopolis': ['Jesse'],
... 'Tanner': ['Danny R', 'Michelle', 'Stephanie J'],
... 'Gladstone': ['Joey'],
... 'Donaldson-Katsopolis': ['Rebecca'],
... 'Gibbler': ['Kimmy'],
... 'Tanner-Fuller': ['DJ']}
True
P2F = {'Jesse Katsopolis': ['Danny R Tanner', 'Joey Gladstone',
'Rebecca Donaldson-Katsopolis'],
'Rebecca Donaldson-Katsopolis': ['Kimmy Gibbler'],
'Stephanie J Tanner': ['Michelle Tanner', 'Kimmy Gibbler'],
'Danny R Tanner': ['Jesse Katsopolis', 'DJ Tanner-Fuller',
'Joey Gladstone']}
"""
person = {}
person1 = {}
for key in person_to_friends.keys():
num = key.rfind(' ')
person[key[num:]] = [key[:num]]
for val in person_to_friends.values():
for item in val:
numf = item.rfind(' ')
if item[numf:] not in person:
person[item[numf:]] = [item[:numf]]
else:
person[item[numf:]].append(item[:numf])
print(person)
答案 0 :(得分:0)
使用set
代替list
会自动为您修复:
def get_last_to_first(
person_to_friends: Dict[str, List[str]]) -> Dict[str, List[str]]:
"""Return a "last name to first name(s)" dictionary with the people
from the "person to friends" dictionary person_to_friends.
>>> get_last_to_first(P2F) == {
... 'Katsopolis': ['Jesse'],
... 'Tanner': ['Danny R', 'Michelle', 'Stephanie J'],
... 'Gladstone': ['Joey'],
... 'Donaldson-Katsopolis': ['Rebecca'],
... 'Gibbler': ['Kimmy'],
... 'Tanner-Fuller': ['DJ']}
True
P2F = {'Jesse Katsopolis': ['Danny R Tanner', 'Joey Gladstone',
'Rebecca Donaldson-Katsopolis'],
'Rebecca Donaldson-Katsopolis': ['Kimmy Gibbler'],
'Stephanie J Tanner': ['Michelle Tanner', 'Kimmy Gibbler'],
'Danny R Tanner': ['Jesse Katsopolis', 'DJ Tanner-Fuller',
'Joey Gladstone']}
"""
person = {}
person1 = {}
for key in person_to_friends.keys():
num = key.rfind(' ')
# person[key[num:]] = set([key[:num]])
if key[num:] not in person:
person[key[num:]] = set([key[:num]])
else:
person[key[num:]].add(key[:num])
for val in person_to_friends.values():
for item in val:
numf = item.rfind(' ')
if item[numf:] not in person:
person[item[numf:]] = set([item[:numf]])
else:
person[item[numf:]].add(item[:numf])
print(person)
修改
它不包含Stephanie J Tanner
的原因是因为您覆盖了上面代码中更改的第一级密钥。
您可能会受益于python的list / dict理解和defaultdict使其更加美观。
from collections import defaultdict
def simple(p2f):
all_names = set(x for k, v in p2f.items() for x in [k] + v)
person = defaultdict(set)
for p in all_names:
*first_name, last_name = p.split()
person[last_name].add(" ".join(first_name))
print(person)
return person