我是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]
但这不起作用,你们中的任何人都知道解决方案吗?
答案 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)
它并不像罗伯茨的回答那样具有防弹性,但更容易理解(希望如此)。