多个值到单个键

时间:2014-07-14 08:00:56

标签: python python-2.6

我有一个包含<name> <surname>的输入文件,例如

Shankar Kale
Jitendra Shirke
Rajendra Bagwe
Mahendra Kale

我想创建一个字典,将姓氏映射到这样的名字:

{'Kale':['Shankar', 'Mahendra'], 'Bagwe':'Rajendra', 'Shirke':'Jitendra'}

2 个答案:

答案 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>)