Python:向字典中的列表添加元素
所以,
我今天感觉有点低落,手头的参考资料也帮不了我。
我有一个文件,格式是这样的:
x1 y1 z1
x1 y2 z2
x2 y3 z3
我想把它变成一个字典,格式像这样:{x1: [[y1, z1], [y2, z2]], x2: [y3, z3]},但是我在找一个高效的方法时遇到了困难。谁能帮帮我?
4 个回答
0
你可以这样做:
result = { }
for line in lines:
terms = line.split()
result.setdefault(terms[0], []).append(terms[1:])
1
你可以这样做:
def makeKeyValuePair(tokens):
return tokens[0], tokens[1:]
print dict(makeKeyValuePair(line.rstrip().split()) for line in fileObject)
这段代码会从每一行提取出键值对,然后创建一个字典。这里假设 x1、y1 等这些值里没有空格。
正如 delnan 提到的,可能会出现重复的键,这取决于你的具体情况。这意味着你只能得到最后一行中那个键的值。为了避免这个问题,可以使用一个叫 defaultdict
的东西:
from collections import defaultdict
d = defaultdict(list)
for line in fileObject:
tokens = line.rstrip().split()
d[tokens[0]].append(tokens[1:])
4
我来告诉你,你可以从一个字符串开始
data_str = """x1 y1 z1
x1 y2 z2
x2 y3 z3"""
然后你会得到
data_list = [d.split() for d in data_str.splitlines()] # [['x1', 'y1', 'z1'], ['x1', 'y2', 'z2'], ['x2', 'y3', 'z3']]
接着创建一个默认字典
from collections import defaultdict
data_dict = defaultdict(list)
for data_row in data_list: # E.g., data_row = ['x1', 'y1', 'z1']
data_dict[data_row[0]].append(data_row[1:])
print data_dict # defaultdict(<type 'list'>, {'x2': [['y3', 'z3']], 'x1': [['y1', 'z1'], ['y2', 'z2']]})