Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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 从具有重复行名的文件创建dict_Python_Dictionary - Fatal编程技术网

Python 从具有重复行名的文件创建dict

Python 从具有重复行名的文件创建dict,python,dictionary,Python,Dictionary,我有一个.txt文件,其值如下: 1 3 4 2 5 6 5 7 我想创建一个这样的词典: 1 [3, 4] 2 [5, 6] 5 [7] 行中的第一个数字是键,其余部分是要放入列表的值 实现这一目标最有效的方法是什么? 我知道使用 f = open('data.txt','r') for i in f: 然后使用condition创建一个列表,然后将其添加到dict中。但我想用一种更简洁的方法来实现它。使用 导入集合 d=集合.defaultdict(列表) 将open('data.tx

我有一个
.txt
文件,其值如下:

1 3 4
2 5 6
5 7
我想创建一个这样的词典:

1 [3, 4]
2 [5, 6]
5 [7]
行中的第一个数字是键,其余部分是要放入列表的值

实现这一目标最有效的方法是什么? 我知道使用

f = open('data.txt','r')
for i in f:
然后使用condition创建一个列表,然后将其添加到dict中。但我想用一种更简洁的方法来实现它。

使用

导入集合
d=集合.defaultdict(列表)
将open('data.txt','r')作为fp:
对于fp中的行:
l=map(int,line.strip().split())
d[l[0]]。扩展(l[1:])
印刷品(d)
#defaultdict(,{1:[3,4],2:[5,6],5:[7]})
将每行拆分为(键、值)对,并将它们添加到默认dict中,以空列表作为初始值

from collections import defaultdict

mydict = defaultdict(list)

for line in f.readlines():
    line = [int(item) for item in line.split()]
    key, *values = line
    mydict[key].extend(values)

下面是另一种更直接的方法:

d = {}
with open('somedata.txt', 'rt') as f:
    for line in f:
        numbers = map(int, line.split())
        numbers = list(numbers) # for Python 3
        d.setdefault(numbers[0], []).extend(numbers[1:])

print(d)  # -> {1: [3, 4], 2: [5, 6], 5: [7]}

这里有一个不包含任何导入的选项,可将条目转换为int:

testDict = {}

with open('test.txt') as f:
   lines = f.readlines()
   for line in lines:
      line = map(int, line.split(' '))
      testDict[line[0]] = list(line[1:])

print testDict # -> {1: [3, 4], 2: [5, 6], 5: [7]}

解析文本文件并在执行过程中更新词典有什么不好的地方?当然,你可以读入整个文件,将其拆分,然后使用字典理解来完成,但这取决于编码人员的偏好
testDict = {}

with open('test.txt') as f:
   lines = f.readlines()
   for line in lines:
      line = map(int, line.split(' '))
      testDict[line[0]] = list(line[1:])

print testDict # -> {1: [3, 4], 2: [5, 6], 5: [7]}