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()
!