Python 用值替换字典键

Python 用值替换字典键,python,dictionary,Python,Dictionary,我已经从一个文本文件制作了一个字典,并想用它来替换单独文件中出现的键及其值 例如,我的字典看起来像 names = {1:"Bob", 2:"John", 3:"Tom"} 1 black cat 2 gray elephant 3 brown dog 另一个文件看起来像 names = {1:"Bob", 2:"John", 3:"Tom"} 1 black cat 2 gray elephant 3 brown dog 我希望它最终是 Bob black ca

我已经从一个文本文件制作了一个字典,并想用它来替换单独文件中出现的键及其值

例如,我的字典看起来像

names = {1:"Bob", 2:"John", 3:"Tom"}
1 black cat  
2 gray elephant  
3 brown dog  
另一个文件看起来像

names = {1:"Bob", 2:"John", 3:"Tom"}
1 black cat  
2 gray elephant  
3 brown dog  
我希望它最终是

Bob black cat  
John gray elephant  
Tom brown dog  
到目前为止,我只编写了编写字典的代码

names = {}  
for line in open("text.txt", 'r'):  
    item = line.split()  
    key, value = item[0], item[2]  
    names[key] = value  

我想打开第二个文件,并使用名称词典将其中出现的键替换为它们的值。我知道您可以使用
replace(key,dict[key])
,但不确定如何使用。

您可以迭代字典值并使用
replace

for key in names:
    text = text.replace(key, names[key])

(是
文本
您文件的内容。)

如果您使用字典,我会将它们加载到两个单独的字典中,然后合并它们

如果已将名称加载到
名称
,将动物加载到
动物
,则可以按如下方式合并它们:

merged = {}
for key, name in names.iteritems():
    merged[name] = animals[key]
这里有一个方法:

my_dict = {1:"Bob", 2:"John", 3:"Tom"}

with open("test.txt", "r") as f_in, open("new.txt", "w") as f_out:
    for line in f_in:
        s_line = line.split()
        new_line = [my_dict[int(s_line[0])]]
        new_line.extend(s_line[1:])
        f_out.write(" ".join(new_line) + "\n")

通过重定向到
名称

您还需要对行的其余部分进行切片(
item[2]
仅获取第三个元素),然后将它们重新连接在一起:

names = {1:"Bob", 2:"John", 3:"Tom"}
with open("text.txt", 'r') as r, open('out.txt', 'w') as w:
    for line in fp:
        item = line.split()  
        key, value = item[0], item[1:]    # Python 2
        # key, *value = item              # Python 3
        w.write("{} {}".format(names[int(key)], ' '.join(value)))

$ cat out.txt
Bob black cat
John gray elephant
Tom brown dog

请尝试以下代码:


new_dict={value:key for(key,value)in old_dict.items()}

如果您尝试过json模块,它会更干净。示例:导入json json.load(file_object),它将转换为python字典,然后您可以使用递归进行替换。海报没有表明她的数据格式是json格式。从她分割数据的方式来看,事实并非如此。我本以为我可以像这样直接使用它,但它抛出了一个属性错误,即“file”对象没有属性“replace”。如果我使用f.splitlines()也一样,只是它的“list”没有属性“replace”。这是因为
text
必须是字符串。在上面的代码之前使用
text=f.read()