有一個星期一的情況下,沒有我的引用幫助我。
我有格式化像這樣的文件:
x1 y1 z1
x1 y2 z2
x2 y3 z3
我想作格式化這樣的字典:{X1:[Y1,Z1],[Y2,Z2],X2: y3,z3]}但我陷入了一個有效的方式來做到這一點。幫幫我?
有一個星期一的情況下,沒有我的引用幫助我。
我有格式化像這樣的文件:
x1 y1 z1
x1 y2 z2
x2 y3 z3
我想作格式化這樣的字典:{X1:[Y1,Z1],[Y2,Z2],X2: y3,z3]}但我陷入了一個有效的方式來做到這一點。幫幫我?
我會說,你開始用繩子
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']]
然後創建一個defaultdict
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']]})
你可以做這樣的事情:
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:])
d={}
for line in file:
split = line.strip().split(" ")
if not d.has_key(split[0]): d[split[0]] = []
d[split[0]].append(split[1:])
你可以這樣做:
result = { }
for line in lines:
terms = line.split()
result.setdefault(terms[0], []).append(terms[1:])
你不追加到映射。你追加(可變)序列。不要讓你的收藏混淆;) – delnan 2011-02-14 17:18:28