Python:向字典中的列表添加元素

0 投票
4 回答
874 浏览
提问于 2025-04-16 11:48

所以,

我今天感觉有点低落,手头的参考资料也帮不了我。

我有一个文件,格式是这样的:

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']]})

撰写回答