将此文件转换为字典

2024-10-03 06:18:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Stackoverflow上到处找过,但找不到这里讨论的内容。我有一个列表要转换成字典。你知道吗

3
banana
apple
orange
5.00E-2
1
7.02E-4
1.00E-4
4
5.13E-4
-5.76E-2
8
7.23E-8
-6.12E-9
4
5.02E

数字3是钥匙的数目。接下来的3个字符串是键名。接下来的3个值是列表的第一个元素……以此类推。例如,我会得到:

  mydict['banana']=[ 5.00E-2, 1.00E-4, -5.76E-2, -6.12E-9]
  mydict['apple'] =[1,           4,       8,        4]
  mydict['orange']=[ 7.02E-4, 5.13E-4,  7.23E-8,   np.nan ]

请注意,最后一个元素不完整,仅为“5.02E”,必须用替换努皮南. 此外,每个列表中的元素数必须相同,缺少的值也应相同努皮南. 这是一个Python2.7.x问题。你知道吗

所以我的问题是,我正在寻找最好的方法来创建字典。怎么做?你知道吗


Tags: 字符串元素内容apple列表字典数字stackoverflow
2条回答

我认为,^{}+^{}在这里可能有用:

from collections import defaultdict
from itertools import cycle, izip, count, repeat

result = defaultdict(list)

with open(path) as fp:
    num = int(next(fp))
    idx = 0

    # create infinite loop of repeating keys to match them with the values:
    keys = cycle([next(fp).strip() for _ in range(num)])

    for k, v, c in izip(keys, fp, count()):
        result[k].append(np.float(v))

    if (c + 1) % num: # need to populate with nans
        result[k].extend(repeat(np.nan, num - (c + 1) % num))
num = mylist[0]
mydict = {}
for i in range(num):
    mydict[mylist[i + 1]] = mylist[i + 1 + num::num]

或者如果你喜欢一句话

mydict = {mylist[i + 1]:mylist[num + i + 1::num] for i in range(mylist[0])}

注意,这不会用numpy.nan替换丢失的项;这类似于

from itertools import izip_longest
import numpy as np

num      = mylist[0]
labels   = mylist[1:num + 1]
num_cols = (len(mylist) - 2) // num
cols     = (mylist[1 + c*num::num] for c in range(1, num_cols + 2))
rows     = izip_longest(*cols, fillvalue=np.nan)

mydict = dict(zip(labels, rows))

相关问题 更多 >