我有一个包含<name> <surname>
的输入文件,例如
Shankar Kale
Jitendra Shirke
Rajendra Bagwe
Mahendra Kale
我想创建一个字典,将姓氏映射到这样的名字:
{'Kale':['Shankar', 'Mahendra'], 'Bagwe':'Rajendra', 'Shirke':'Jitendra'}
答案 0 :(得分:2)
我不知道是否可以有多个名字,所以这个解决方案将涵盖这种可能性。它假定姓氏始终是该行中的最后一个单词。
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> with open('myfile', 'r') as names:
... for line in names:
... firstnames, lastname = line.strip().rpartition(' ')[::2] # or just line.split() if there are always two words in each line
... d[lastname].append(firstnames)
...
>>> d
defaultdict(<type 'list'>, {'Bagwe': ['Rajendra'], 'Kale': ['Shankar', 'Mahendra'], 'Shirke': ['Jitendra']})
如果带有一个元素的列表打扰你,在Python2.7 +中你可以发出:
>>> d = {k:(v if len(v)!=1 else v[0]) for k,v in d.iteritems()}
>>> d
{'Bagwe': 'Rajendra', 'Kale': ['Shankar', 'Mahendra'], 'Shirke': 'Jitendra'}
由于您使用的是Python2.6,因此可以执行此操作:
d = dict([(k,(v if len(v)!=1 else v[0])) for k,v in d.iteritems()])
答案 1 :(得分:0)
尝试使用Default dict
from collections import defaultdict
dictnames=defaultdict(list,{})
附上你的清单
dictnames[<surname>].append(<first_name>)