我还不熟悉Python,我想知道如何将已经存在于key:value形式的文本文件转换为Python字典?
EG。
2:red
3:orange
5:yellow
6:green
(每个键:单独一行的值)
我看过其他帖子,但其中没有一个似乎有用,我知道我做错了什么。到目前为止,我有:
def create_colours_dictionary(filename):
colours_dict = {}
file = open(filename,'r')
contents = file.read()
for key in contents:
#???
return colours_dict
答案 0 :(得分:1)
执行此操作的直接方法是使用传统的for
循环和str.split
方法。
我不是从文件中读取,而是将输入数据作为多行字符串嵌入到脚本中,并使用str.splitlines
将其转换为字符串列表,因此我们可以循环它,就像循环文件的行一样。
# Use a list of strings to simulate the file
contents = '''\
2:red
3:orange
5:yellow
6:green
'''.splitlines()
colours_dict = {}
for s in contents:
k, v = s.split(':')
colours_dict[k] = v
print(colours_dict)
<强>输出强>
{'2': 'red', '3': 'orange', '5': 'yellow', '6': 'green'}
请注意,只有冒号周围没有空格,此代码才能正常工作。如果可能有空格(或行的开头或结尾处的空格),则可以使用str.strip
方法删除它们。
有几种方法可以使它更紧凑。
我们可以使用嵌套在字典理解中的列表理解:
colours_dict = {k: v for k, v in [s.split(':') for s in contents]}
但是在generator expression上使用dict
构造函数更加紧凑:
colours_dict = dict(s.split(':') for s in contents)
如果您不熟悉理解,请参阅 官方教程中List Comprehensions和Dictionaries。
答案 1 :(得分:0)
迭代你的文件并建立一个字典。
def create_colours_dictionary(filename):
colours_dict = {}
with open(filename) as file:
for line in file:
k, v = line.rstrip().split(':')
colours_dict[k] = v
return colours_dict
dct = create_colours_dictionary('file.txt')
或者,如果你正在寻找紧凑的东西,你可以使用字母理解与lambda分裂冒号。
colours_dict = {k : v for k, v in (
line.rstrip().split(':') for line in open(filename)
}
如果冒号被空格包围,这种方法需要进行一些修改 - 也许是正则表达式?
答案 2 :(得分:-1)
假设文本文件具有声明的'key:value'并且文件名包含在变量fname
中,您可以编写一个函数来读取文件并返回dict
或仅使用简单的with
语句。
如果在代码中的多个位置执行此操作,则函数可能是更好的选择。如果只做一次2线程就行了。
# Example with fname being the path to the textfile
def dict_from(fname):
return dict(line.strip().split(':') for line in open(fname))
fname = '...'
# ...
d1 = dict_from(fname)
# Alternative solution
with open(fname) as fd:
d2 = dict(line.strip().split(':') for line in fd)
两个建议的解决方案都使用内置的dict
构造函数和生成器表达式来解析每一行。使用strip
删除行的开头和结尾处的空白区域。使用split
从每一行创建一个(键,值)对。