从firstname和surname中提取首字母,并将它们与单独的字典进行比较

时间:2018-04-15 13:31:17

标签: python

我是python的新手,需要一些帮助。

我尝试做的是从用户输入的名字和姓氏中提取姓名缩写。然后我想将首字母与外部文件中的一些数据进行比较。我以读模式打开文件并将数据导入字典。

dict1 = {'EV': ' Erik Vils', 'EVI': ' Erik Vils', 'EVIL': ' Erik Vils', 'RH': ' Rasmus Holst', 'RHO': ' Rasmus Holst', 'KA': ' Kasper Andersen'}

firstname = input('write firstname')
surname = input('write surname')

mylist=[]
mylist.append(firstname)
mylist.append(surname)

myinitals = ''.join([x[0] for x in mylist]) 
mylist=[firstname + ' ' + surname] 
mylist.append (myinitals) 

a1=mylist[0] 
b1=mylist[1] 

dict2 = {}
for item in mylist:
    x = line.split(",")
    a1 = a1.strip('') 
    b1 = b1.strip('') 
    dict2[b1]=a1 
>>> dict2 ={'EV': 'Erik Vils'}

从这里开始,我被困住了。我想生成不等于dict1中的任何键的首字母,在这种情况下,结果=' Evils' Erik Vils'。 我一直试图做一个while循环:

aux = dict1.keys()
while b1 in aux:
    b1=b1+surname[1:aux]

但这不起作用,你们中的任何人都知道解决方案吗?

2 个答案:

答案 0 :(得分:0)

你走在正确的轨道上,我根据用户列表编写了类似的实现。您可以根据用户输入更改它以附加到列表:

from collections import OrderedDict

names = ['Erik Vils', 'Erik Vils', 'Erik Vils', 'Erik Vils', 'Erik Vils', 'Somebody Else', 'Peter Pan', 'Peter Pan']

all_users = OrderedDict()

for entry in names:
    firstname, lastname = entry.split()
    i = 1
    while True:
        add_number=""
        if i >= len(lastname):
            add_number = i - len(lastname)
        username = firstname[0] + lastname[:i] + str(add_number)
        username = username.upper()
        if username not in all_users:
            all_users[username] = entry
            break
        i += 1

print(all_users)

# prints OrderedDict([('EV', 'Erik Vils'), ('EVI', 'Erik Vils'), ('EVIL', 'Erik Vils'), ('EVILS', 'Erik Vils'), ('EVILS1', 'Erik Vils'), ('SE', 'Somebody Else'), ('PP', 'Peter Pan'), ('PPA', 'Peter Pan')])

我还使用了OrderedDict来保留插入名称的顺序。但是,这不是必要的。

答案 1 :(得分:0)

这是另一种解决方案:

dict1 = {'EV': ' Erik Vils', 'EVI': ' Erik Vils', 'EVIL': ' Erik Vils', 'RH': ' Rasmus Holst', 'RHO': ' Rasmus Holst', 'KA': ' Kasper Andersen'}

firstname = input('write firstname')
surname = input('write surname')

myinitals = firstname[0] + surname[0]

counter = 1

while myinitals in dict1:
    myinitals = firstname[0] + surname[0:counter]
    counter += 1

print(myinitals)

它并不像罗伯茨的回答那样具有防弹性,但更容易理解(希望如此)。