多值到单键

2024-05-23 21:50:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Shankar Kale
Jitendra Shirke
Rajendra Bagwe
Mahendra Kale

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

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

Tags: 文件name字典surname名字姓氏mahendrakale
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()])

尝试使用Default dict

from collections import defaultdict
dictnames=defaultdict(list,{})

附加您的列表

dictnames[<surname>].append(<first_name>)

相关问题 更多 >