簡體   English   中英

從具有重復行名的文件中創建字典

[英]Creating dict from file with repeated row names

我有一個.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:

然后使用條件創建列表,然后將其添加到字典中。 但是我想要一種更整潔的方法。

這是另一種更直接的方法:

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

使用collections.defaultdict

import collections 

d = collections.defaultdict(list)

with open('data.txt','r') as fp:
    for line in fp:
        l = map(int, line.strip().split())
        d[l[0]].extend(l[1:])

print(d)
# defaultdict(<type 'list'>, {1: [3, 4], 2: [5, 6], 5: [7]})

將每一行拆分為一個(鍵,值)對,並將它們添加到默認字典中,並將空列表作為初始值

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)

這是一個不帶任何導入並將其轉換為整數的選項:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM