python 将字典1的值链接到字典2的键

0 投票
1 回答
3065 浏览
提问于 2025-04-17 13:25

我有两个字典(可以理解为一组键值对)。我需要把第一个字典里的值和第二个字典里的键进行匹配,然后返回在第二个字典中找到的值。我到目前为止想出了这个:

d1 = {}
with open ("file1.txt") as f:
   for line in f:
       (key,val) = line.split()
       d[int(key)] = val
d2 = {}
with open("file2.txt") as f:
   for line in f:
      (key,val) = line.split()
      d[int(key)] = val

for item in d1.values():
     if d2.has_key(item):
         print value.d2(item)

但是我一直收到一个错误提示:“解包的值太多了”。除了这个错误,我的脚本真的能实现我想要的功能吗?

更新(抱歉,我不知道可以编辑我的问题!):在我的两个文本文件中,file1把一个单词映射到一个数字系统,而file2把这个数字映射到它相关的类别。最终的结果应该是file1中的单词与file2中找到的类别相连接。这个过程是先把单词连接到一个数字,然后再把这个数字连接到一个类别。举个例子:Aanbidden(荷兰语单词) > 12 > 类别“affect”。我文件中的行看起来是这样的:

file1.txt:

aanbidden: 12 13 14 57 58  
leven : 15
drinken: 23 56 
... 
(As you see each key can have one or more values)

file2.txt:

12: affect
13: posemo
14: Posfeel
15: Optim
23: discrep
56: money
57: metaph
58: religious
...
(In this file each key has only one value)

1 个回答

1

根据你的评论,下面的内容似乎是你想要的:

d1 = {}
with open ("file1.txt") as f:
   for line in f:
       (key,val) = line[:-1].split(": ")
       d1[key] = val.split()

d2 = {}
with open("file2.txt") as f:
   for line in f:
      (key,val) = line[:-1].split(": ")
      d2[key] = val

for word, nums in d1.items():
    print word, "->",
    for num in nums:
        if d2.has_key(num):
            print d2[num],
    print

根据你上面提供的文件,它会打印出以下内容:

drinken -> discrep money
leven -> Optim
aanbidden -> affect posemo Posfeel metaph religious

撰写回答