Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:附加到字典中的列表_Python - Fatal编程技术网

Python:附加到字典中的列表

Python:附加到字典中的列表,python,Python,所以 有个星期一的案子,我的推荐人都帮不了我 我有一个格式如下的文件: x1 y1 z1 x1 y2 z2 x2 y3 z3 def makeKeyValuePair(tokens): return tokens[0], tokens[1:] print dict(makeKeyValuePair(line.rstrip().split()) for line in fileObject) 我想制作一个如下格式的字典:{x1:[[y1,z1],[

所以

有个星期一的案子,我的推荐人都帮不了我

我有一个格式如下的文件:

x1    y1    z1
x1    y2    z2
x2    y3    z3
def makeKeyValuePair(tokens):
    return tokens[0], tokens[1:]

print dict(makeKeyValuePair(line.rstrip().split()) for line in fileObject)

我想制作一个如下格式的字典:{x1:[[y1,z1],[y2,z2]],x2:[y3,z3]}但我一直在寻找一种有效的方法来实现这一点。帮助?

您可以这样做:

x1    y1    z1
x1    y2    z2
x2    y3    z3
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:])

你可以这样做:

x1    y1    z1
x1    y2    z2
x2    y3    z3
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:])

我要说你从一根绳子开始

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']]})
从集合导入defaultdict
数据目录=默认目录(列表)
对于数据列表中的数据行:#例如,数据行=['x1',y1',z1']
数据目录[数据行[0]]。追加(数据行[1:])
打印数据dict#defaultdict(,{x2':[[y3',z3']],'x1':[[y1',z1'],[y2',z2']})

我想说你从一个字符串开始

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']]})
从集合导入defaultdict
数据目录=默认目录(列表)
对于数据列表中的数据行:#例如,数据行=['x1',y1',z1']
数据目录[数据行[0]]。追加(数据行[1:])
打印数据dict#defaultdict(,{x2':[[y3',z3']],'x1':[[y1',z1'],[y2',z2']})
您可以执行以下操作:

result = { }
for line in lines:
    terms = line.split()
    result.setdefault(terms[0], []).append(terms[1:])
您可以这样做:

result = { }
for line in lines:
    terms = line.split()
    result.setdefault(terms[0], []).append(terms[1:])


您不需要附加到映射。附加到(可变)序列。不要把你的收藏搞混;)您不需要附加到映射。附加到(可变)序列。不要把你的收藏搞混;)否,如果该键出现多次,则会覆盖列表。你需要一个
defaultdict
@delnan:Unique key是我做的另一个假设。。。我将编辑以包含
defaultdict
解决方案。在OP的示例中,唯一键显然不是这种情况;)否,如果该键出现多次,则会覆盖列表。你需要一个
defaultdict
@delnan:Unique key是我做的另一个假设。。。我将编辑以包含
defaultdict
解决方案。在OP的示例中,唯一键显然不是这种情况;)这与AndiDog的答案有着同样的问题:它会覆盖重复的条目。@delnan显然不是唯一一个明显带有周一坏案例的作者。现在,这是一个穷人对
集合的重新创造。defaultdict
;)@德尔南不知道这件事。你每天都会学到一些东西:)这和AndiDog的答案有着同样的问题:它会覆盖重复的条目。@delnan显然,作者不是唯一一个明显有周一坏案例的人。现在,这是一个穷人对
集合的重新创造。defaultdict
;)@德尔南不知道这件事。您每天都会学到一些东西:)+1表示整个解决方案,并一次就把它做好;)在Python3中,您还可以使用
作为键,数据列表中的*value
(iterable unpacking,非常整洁),无法指定键元素和值元素之间的差异有点难看,python3带来的好处允许在解包iterables时使用解包函数参数的符号。+1表示整个解决方案,一次就搞定;)在python3中,您还可以对key使用
,data_list中的*values
(iterable unpacking,非常简洁)。是的,不能指定key和value元素之间的差异有点难看,python3带来的好处允许在解包iterables时使用解包函数参数的表示法。