有两个词:
'охрана'
'оранжевый'
基于它们,有必要创建两个字典(每个单词一个字典)。字典的key是一个字母,value是key的序号:
{'о': 1, 'х': 2, 'р': 3, 'а': 6, 'н': 5}
{'о': 1, 'р': 2, 'а': 3, 'н': 4, 'ж': 5, 'е': 6, 'в': 7, 'ы': 8, 'й': 9}
接下来,您需要创建第三个字典,其中键是两个单词中重复的字母,值是原始字典中重复字母的含义集合:
{'н': {5,4}, 'р': {3, 2}, 'о': {1, 1}, 'а': {6, 3}}
我正在尝试以下代码,但无法形成键和值相互匹配的正确字典:
a='охрана'
b='оранжевый'
a1={a[i]:i+1 for i in range(len(a))}
print(a1)
b1={b[i]:i+1 for i in range(len(b))}
print(b1)
res1=set()
res2=[]
for i in b1.keys():
if i in a1.keys():
res1.add(i)
for i,j in zip(a1,b1):
if i in b1:
res2+=[[a1[i]]+[b1[i]]]
print(res1)
print(res2)
res3={i:j for i,j in zip(res1,res2)}
print(res3)
我的一个简单的(就性能而言不是最佳的)解决方案:
解释:
for l in wordA- 对于单词 A 中的所有字母if l in wordB- 位于单词 B 中l: (wordA.index(l)+1, wordB.index(l)+1)l- 添加一个带有值的键:(индекс первого вхождения символа в первом слове, индекс первого вхождения символа во втором слове)结论:
我在没有回复的时候留下了评论,事情就会这样。你的错误是,当你组装最后一个字典时
res3,你zip试图从集合(res1)的值中进行配对,根据定义,集合()是混乱的,而列表(res2),根据定义,是有序的。因此,每次运行程序时,您都会从集合中取出任何字母,并用列表中的一对非常特定的值替换它。您需要res1将其定义为一个列表,一切都会顺利进行。还有一个我在评论中提出的问题——作业说最后一个字典的值应该是集合,而不是列表。同时,赋值中存在一个明显的错误,集合被指示为
{1,1},这是不可能的,因为集合中不能有相同的值。因此,有集合的结果是可能的,但不是{1,1},而是{1}。像这样: