我刚刚开始使用 Python,有点困惑。我将字典的基本思想理解为(键,值)。我正在编写一个程序,想读入一个文件,在字典中讲述它,然后通过引用这些值来完成不同的功能。我不确定是否应该使用字典或列表。文件的基本布局是:名称后跟 12 个不同的年份,例如:A 12 12 01 11 0 0 2 3 4 9 12 9
我不确定阅读这些信息的最佳方式是什么。我在想,如果我的名字后跟年份,字典可能会有所帮助,但我不确定是否可以将 12 年映射到一个键名。我真的很困惑如何做到这一点。我可以逐行读取文件,但不能在字典中读取。
def readInFile():
fileDict ={"Name ": "Years"}
with open("names.txt", "r") as f:
_ = next(f)
for line in f:
if line[1] in fileDict:
fileDict[line[0]].append(line[1])
else:
fileDict[line[0]] = [line[1]]
我对这段代码的想法是将每年附加到该值上。如果您有任何建议,请告诉我。
谢谢!
您可以将 12 年映射到一个键名。您似乎认为您需要在字典和列表之间进行选择(“我不确定我是否应该使用字典或列表。”)但这些都不是替代方案。你的 12 年可以用一个列表来表示。您的姓名可以是字典键。因此,您需要(如 PM 2Ring 建议的那样)一个字典,其中键是名称,值是年份列表。
def readInFile():
fileDict = {}
with open(r"names.txt", "r") as f:
for line in f:
name, years = line.split(" ",1)
fileDict[name] = years.split()
有两次对字符串方法的调用split()
。第一个将名称与第一个空格的年份分开。(您可以使用 获取名称line[0]
,但前提是名称只有一个字符长,这对真实数据不太可能有用。)第二次调用split()
将年份分开并将它们放在一个列表中。
单行示例文件的结果将与运行此相同:
fileDict = {'A': ['12', '12', '01', '11', '0', '0', '2', '3', '4', '9', '12', '9']}
如您所见,这些年份是字符串而不是整数:您可能需要转换它们。
而不是这样做:
_ = next(f)
扔掉你的记录数,考虑做
for line in f:
if line.strip().isdigit():
continue
反而。如果您使用file
的内置迭代(for line in f
),那么它一般最好不要调用next()
上f
自己。
我也不清楚为什么您的代码会这样做:
fileDict ={"Name ": "Years"}
这是对您打算放入字典的内容的描述,但这不是字典的工作方式。它们不是具有命名列的数据库表。如果您使用带有 key: name和 value: list of years的字典,则该结构是隐式的。您能做的最好的事情就是在注释或类型注释中描述它。执行分配将导致:
fileDict = {
'A': ['12', '12', '01', '11', '0', '0', '2', '3', '4', '9', '12', '9'],
'Name ': 'Years'
}
它混合了描述和数据,可能不是您想要的,因为您的后续代码可能会期望字典值中有 12 年的年份列表,如果是这样,它将阻塞字符串"Years"
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句